写在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),其次是你自己的。 第二个命令在主机上运行。