我无法通过标准谷歌搜索回答的快速问题。在一个非常简单的泊坞窗图像中,我试图将文本输出到两个单独的文件。为简单起见,我已从我的示例中删除了所有其他代码:
test # cat Dockerfile
FROM centos:latest
CMD echo "blah" > /docker_path/blah
CMD echo "blah2" > /docker_path/blah2
test # docker build -t test .
Sending build context to Docker daemon 3.072 kB
Sending build context to Docker daemon
Step 0 : FROM centos:latest
---> bac949ce964b
Step 1 : CMD echo "blah" > /docker_path/blah
---> Using cache
---> bf1fb35bdaca
Step 2 : CMD echo "blah2" > /docker_path/blah2
---> Using cache
---> f36005c7aba9
Successfully built f36005c7aba9
test # docker run -v /usr/local/docker/test:/docker_path:Z test
test # ls
blah2 Dockerfile
为什么只写一个文件?我已经意识到它始终是写入的第二个CMD,如果我将写入加入一个命令(ala:CMD echo" blah"> / docker_path / blah&& echo&# 34; blah2"> / docker_path / blah2),它将输出两个文件。
你能帮我理解这种行为吗?
谢谢!
答案 0 :(得分:3)
CMD
确定从映像启动容器时默认运行的命令。只有最后一个语句有效,因为它会覆盖先前语句设置的内容。如果您想要更复杂的行为,请考虑在图片中包含shell脚本,并使用CMD
调用该脚本。
如果要在构建映像时执行命令,请使用RUN
语句。这些按照您的预期顺序执行。查看does.了解详情。