所以我试图让我们的公司采用Docker发布工作流程,所以我必须使用docker和我希望合并的所有技术来制作项目.
我创建了一个Dockerfile来构建我们的VM环境,除了最后几步之外,一切正常.
我有我的机器上的文件夹与我们的标准化的搬运工LEMP堆,当我建立这个项目在我的/文件/ kitematic/IMAGE_NAME这是我们将初始化一个git仓库创建一个新的安装体积图像.
出于这个原因,我想使用COPY或添加将所有dockerfiles复制到新的Docker卷中,因此它包含在git仓库中以跟踪更改,以及让devs更容易克隆repo构建并继续.
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问题的人,因此硬编码了mount路径.它仍然没有移动docker_stack目录,但如果我这样做
ADD ./docker_stack/ /home
它会将其复制到/ home目录但如果我尝试将/ home添加到VOLUME,则文件不会显示在我的本地计算机中.
任何帮助非常感谢
你需要将你的VOLUME
指令放在最后的ADD
指令之下(我建议在CMD
指令之上) - 一旦目录被定义为a VOLUME
,它在那时基本上是"快照"的,并为每个额外的容器创建空的和新的/ layer,因此在该点之后添加的任何文件都将被隐藏/忽略.
还值得注意的是,您不需要显式定义VOLUME
内部Dockerfile
以便-v
在运行时使用bind-mount形式,因此您可能在技术上不需要将docker_stack
目录放在a VOLUME
中Dockerfile
.