测试用例
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 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撰写的事件顺序是什么? 有什么文件可以解释它吗?
答案 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
并且撰写也遵循完全相同的顺序(否则不可能)。