Docker中事件的顺序是什么?

testing用例

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" ] 

行为观察

  • 在构buildDocker组件时, 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构build作品
    • 命令docker exec compose_custom-image_1 ls -l /usr/share/custom-service/my_app/ works:

      -rw-rw-r– 1个节点节点3627 Mar 6 10:40 file.js

      -rw-rw-r– 1节点节点1194 Mar 28 12:54 README.md

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

在这个testing案例中,我想Docker会在构build定制镜像之后docker-compose.yml文件中描述的卷,解释为什么在Dockerfile中我们无法访问它。

Docker构成事件的顺序是什么? 有没有解释它的文件?

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

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

这就是为什么如果你build立你的第一个Dockerfile会出错的原因。

所以这是发生了什么事情:

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

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