Docker撰写的事件顺序是什么?

时间:2017-04-19 14:07:11

标签: docker docker-compose

测试用例

docker-compose.yml档案:

version: '2'

services:
  custom-image:
    build: ../custom-image-folder/
    volumes:
     - /var/www/my_host_app:/usr/share/custom-service/my_app

Dockerfile自定义图片文件:

FROM node:7.8.0-alpine
MAINTAINER DarckCrystale "xxx@xxx.xxx"

RUN ls -l /usr/share/custom-service/my_app/

CMD [ "node" ]

观察到的行为

  • 在构建Docker撰写时,RUN ls -l /usr/share/custom-service/my_app/会抛出错误:

      

    步骤3/6:运行ls -l / usr / share / custom-service / my_app /

         

    --->在8a26523188f9中运行

         

    ls:/ usr / share / custom-service / my_app /:没有这样的文件或目录

         

    错误:服务“自定义节点”无法构建:命令'/ bin / sh -c ls -l / usr / share / custom-service / my_app /'返回非零码:1

  • 如果我评论RUN ls -l /usr/share/custom-service/my_app/

    • 构建Docker撰写作品
    • 命令docker exec compose_custom-image_1 ls -l /usr/share/custom-service/my_app/有效:
        

      -rw-rw-r-- 1节点节点3627 3月6日10:40 file.js

           

      -rw-rw-r-- 1节点节点1194 3月28日12:54 README.md

           

      drwxr-xr-x 6节点节点4096 3月28日12:54应用程序

在这个测试用例的情况下,我认为Docker在构建自定义映像之后安装了docker-compose.yml文件中描述的卷,解释了为什么在Dockerfile中我们无法访问它。

问题

Docker撰写的事件顺序是什么? 有什么文件可以解释它吗?

1 个答案:

答案 0 :(得分:3)

在docker compose(通常为docker run)中,已装入的卷(compose中的volumes和docker run中的-v)将应用于正在运行的容器。

另一方面,像RUN这样的Dockerfile指令在构建时执行。

这就是为什么如果你建立第一个Dockerfile会收到错误的原因。

所以这就是:

$ docker build -t custom-image .
$ docker run -v /var/www/my_host_app:/usr/share/custom-service/my_app custom-image

并且撰写也遵循完全相同的顺序(否则不可能)。