如何将Dockerfile中CMD指令的输出写入宿主机指定文件?
解决方案
要实现将"Hello User"追加到Dockerfile同目录下的txt文件,需要同时修改Dockerfile的CMD指令和容器运行命令(添加目录挂载),具体步骤如下:
1. 修改Dockerfile的CMD指令
因为需要用到shell的追加重定向操作>>,有两种合规写法可选:
写法一:Shell格式CMD
CMD echo "Hello User" >> /host-dir/output.txt
写法二:Exec格式CMD(更符合Docker最佳实践)
CMD ["sh", "-c", "echo 'Hello User' >> /host-dir/output.txt"]
注:Exec格式必须显式调用shell(
sh -c),否则Docker会直接执行echo命令,无法解析重定向符号>>。
2. 调整容器运行命令
容器默认文件系统与宿主机隔离,必须通过卷挂载将宿主机Dockerfile所在目录映射到容器内的/host-dir路径,才能让容器内的写入操作同步到宿主机目标目录。修改后的运行命令为:
docker run -it -p 8080:80 -v "$(pwd)":/host-dir greeting
其中$(pwd)会自动获取当前终端所在目录(即Dockerfile所在目录),将其挂载到容器内的/host-dir。
效果验证
每次执行上述docker run命令后,宿主机Dockerfile同目录下会生成(或追加内容到)output.txt,文件内容会逐次添加"Hello User"。
内容的提问来源于stack exchange,提问作者Samyar
相关产品推荐
相关产品推荐

