Docker CMD命令中波浪号(~)展开失效问题咨询
Docker中CMD数组形式下波浪号(~)无法展开的原因
这不是Docker的Bug,是你没注意到exec格式CMD的特性:
- 用
CMD ["tail", "-f", "~/block.txt"]这种数组(exec)格式时,Docker会直接启动tail进程,完全不经过shell处理。而波浪号~的路径展开是shell(比如bash、sh)的专属功能,命令本身不认识~是什么,所以tail会把~/block.txt当成一个普通文件名去找,自然找不到对应的文件。 - 换成绝对路径
/home/lodgepole/block.txt后,命令直接拿到完整的有效路径,能正确定位文件,所以正常运行。
如果想保留波浪号的写法,有两个办法:
- 用shell格式的CMD:
CMD tail -f ~/block.txt,Docker会自动用/bin/sh -c包裹这条命令执行,shell会帮你把~展开成用户主目录。 - 在数组形式里显式调用shell:
CMD ["/bin/sh", "-c", "tail -f ~/block.txt"],同样借助shell完成波浪号的路径展开。
内容的提问来源于stack exchange,提问作者Yue JIN
相关产品推荐
相关产品推荐

