写在docker容器上的文件给出错误:没有这样的文件或目录
我正在尝试执行以下命令:
docker exec mydocker echo "hello" >> /usr/local/src/scores.txt
但它给了我以下错误:
No such file or directory
但是使用下面的命令:
docker exec -it mydocker bash
我确定该文件实际上存在那里。 有什么我在这里失踪?
谢谢
尝试将echo命令封装在命令string中:
docker exec mydocker sh -c 'echo "hello" >> /usr/local/src/scores.txt'
validation文件内容使用:
docker exec mydocker cat /usr/local/src/scores.txt
有一个很好的理由:它被解释为两个命令。
解决scheme是stacksonstacks张贴 – 包装你的容器命令在一个单一的shell命令:
docker exec mydocker sh -c 'echo "hello" >> /usr/local/src/scores.txt'
但为什么发生?
关键是你已经使用了bash运算符。 类似于任何时候你运行类似于:
echo one two >> file.txt
“>>”运算符不会作为echo的parameter passing(像“one”和“two”)。 相反,它会执行你的echo命令并将其输出附加到一个文件中。
在这种情况下,“>>”运算符对您的docker exec执行相同的操作,并尝试将结果输出到/usr/local/src/scores.txt并报告该目录不存在(在主机上,而不是容器)。
这意味着如果你运行:
docker exec mydocker echo "hello" >> scores.txt
你会在你的主机上findscores.txt文件,其中包含“hello” – 容器上运行命令的输出。 作为最后的testing尝试:
docker exec cf65263ed353 hostname && hostname
你会看到它打印容器的主机名(它的哈希ID),其次是你自己的。 第二个命令在主机上运行。