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
并撰写也遵循完全相同的顺序(否则不可能)。