Dockerfile COPY文件没有在VOLUME上显示

所以即时通讯试图让Docker在我们公司的发布工作stream程中采用,所以我必须使用docker工具和所有我想要合并的技术来生成一个项目。

我已经创build了一个Dockerfile来构build我们的虚拟机环境,除了最后几个步骤外,一切正常。

我将在我的机器上使用我们的标准化Docker LEMP堆栈创build一个文件夹,当我在项目中创build一个新的挂载卷时,它会在我的/ documents / kitematic / image_name中创build一个新的挂载卷。

出于这个原因,我想使用复制或添加到所有dockerfiles复制到新的Docker卷,所以它包括在git仓库跟踪变化,以及更容易开发克隆回购构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是docker文件所在的位置,我最初使用env var $ SMACK_APP_VOL_DIR来添加和读取有问题的envs和ADD / COPY,因此硬编码了安装path。 它仍然不会移动docker_stack目录,但如果我这样做

 ADD ./docker_stack/ /home 

它会将其复制到/ home目录,但是如果我尝试添加/ home到VOLUME文件不显示在我的本地计算机中。

任何帮助不胜感激

你需要把你的VOLUME指令放在最后的ADD指令下面(我build议在CMD指令的上方),一旦目录被定义为VOLUME ,它就会在这个点上被“快照”,并创build空的和新鲜的对于每个额外的容器/图层,在该点之后添加的任何文件都将被遮挡/忽略。

另外值得注意的是,你不需要在Dockerfile中明确定义VOLUME ,以便在运行时使用-v的bind-mountforms,所以你在技术上可能不需要在VOLUME中有docker_stack目录Dockerfile在所有。