2015-12-17 31 views
1

因此,我試圖讓Docker在我們公司的發佈工作流程中採用,所以我必須使用docker和我想要合併的所有技術來生成項目。Dockerfile COPY文件沒有在VOLUME上顯示

我已經創建了一個Dockerfile來構建我們的VM環境,除了最後幾步之外,一切工作都正常。

我將在我的機器上使用我們的標準化Docker LEMP堆棧,當我爲該項目構建映像時,它會在我的/ documents/kitematic/image_name中創建一個新的掛載卷,我們將在其中啓動一個git repo 。

因此,我想使用COPY或添加將所有dockerfiles複製到新的Docker卷中,以便它包含在git repo中以跟蹤更改,並且使開發人員可以更輕鬆地克隆repo build並去。

的Dockerfile的最後一部分是

# Create Mounted Folders 
RUN mkdir /$SMACK_APP_VOL_DIR && \ 
mkdir /$SMACK_APP_VOL_DIR/www && \ 
mkdir /$SMACK_APP_VOL_DIR/docker_stack 

# set owners of web folders before mounting 
RUN usermod -u 1000 www-data 

# set folder groups 
RUN chown -Rf www-data:www-data /$SMACK_APP_VOL_DIR 

# Mount folders 
VOLUME ["/$SMACK_APP_VOL_DIR/www","/$SMACK_APP_VOL_DIR/docker_stack/"] 

# Expose Ports 
EXPOSE 443 
EXPOSE 80 

# Add git commands to allow container updating 
ADD ./docker_stack/pull /usr/bin/pull 
ADD ./docker_stack/push /usr/bin/push 
RUN chmod 755 /usr/bin/pull && chmod 755 /usr/bin/push 

# Supervisor Config 
ADD ./docker_stack/confs/supervisord.conf /etc/supervisord.conf 

# Start Supervisord 
ADD ./docker_stack/start.sh /start.sh 

# nginx site conf 
RUN rm -Rf /etc/nginx/sites-available/* 
ADD ./docker_stack/confs/default.conf /etc/nginx/sites-available/ 

# Copy docker project to folder for inclusion to GIT repo 
ADD ./docker_stack/ /mounted/docker_stack 

CMD ["/bin/bash", "/start.sh"] 

在我的本地文件夾,以便docker_stack是在泊塢窗文件,我原來使用的添加一個環境變量$ SMACK_APP_VOL_DIR和閱讀具有ENVS問題的人和ADD/COPY這樣硬編碼安裝路徑。它仍然在犯規移動docker_stack目錄,但如果我這樣做

ADD ./docker_stack/ /home 

它並把它複製到/ home目錄,但如果我嘗試將/ home轉移到卷中的文件是不是在我的本地機器上顯示。

任何幫助,不勝感激

回答

6

您需要向下移動你的VOLUME指令最終ADD指令如下(我建議正確的CMD指令以上) - 一旦目錄被定義爲VOLUME,它本質上是「快照」,併爲每個額外的容器/圖層創建空的和新的,因此在該點之後添加的任何文件將被遮擋/忽略。

另外值得一提的是,你不需要爲了使用的-v在運行時綁定貼裝形式明確定義DockerfileVOLUME,所以你可能在技術上不具有docker_stack目錄在Dockerfile中根本沒有VOLUME