2015-12-17 36 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