Docker只输出一个文件

快速的问题,我不能通过标准的谷歌search答案。 在一个非常简单的泊坞窗图像,我想输出文本到两个单独的文件。 为了简单起见,我从示例中删除了所有其他代码:

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,如果我join到一个命令(ala:CMD echo“blah”> / docker_path / blah && echo“blah2”> / docker_path / blah2)的写入,它将输出两个文件。

你能帮我理解这个行为吗?

谢谢!

当从图像启动容器时, CMD确定默认运行哪个命令。 只有最后一条语句才会有效果,因为它会覆盖以前的语句。 如果您想要更复杂的行为,请考虑在图像中包含一个shell脚本,并使用CMD调用该脚本。

如果要在构build映像时执行命令,请使用RUN语句。 那些按照您预期的顺序执行。 有关详细信息,请查看Dockerfile参考 。