Docker exec printf给出“无此类文件或目录”错误

rkue9o1l  于 2023-02-18  发布在  Docker
关注(0)|答案(3)|浏览(94)

我正在尝试为现有Docker容器运行以下命令:

docker exec my_docker printf '%sTest' >> /usr/local/src/test.txt

它给出了以下错误:

-bash: /usr/local/src/test.txt: No such file or directory

当我执行以下操作时:

docker exec -it my_docker bash

然后输入同样的命令,一切都很好。这里有什么我遗漏的吗?

txu3uszq

txu3uszq1#

这样做有一个很好的理由:它被解释为两个命令。请尝试将printf命令 Package 在命令字符串中:

docker exec my_docker bash -c 'printf "%sTest" >> /usr/local/src/test.txt'

关键是你使用了bash操作符,类似于你运行的任何时候:

echo one two >> file.txt

“〉〉”操作符不作为参数传递给echo(像“one”和“two”那样),而是执行echo命令并将其输出附加到文件中。在本例中,“〉〉”操作符对docker exec执行相同的操作,并试图将结果输出到/usr/local/src/scores.txt,并报告该目录不存在(在主机上,而不是容器上)。

rggaifut

rggaifut2#

您可以:

docker exec my_docker bash -c "printf '%sTest' >> /usr/local/src/test.txt"

以确保bash正在执行正确的命令。

f87krz0w

f87krz0w3#

>>被Docker主机上的shell捕获。因此,它尝试将docker命令的结果输出到主机上的文件系统,而不是将printf命令的输出输出到容器内的文件系统。如果主机上不存在/usr/local/src/,则尝试输出到该目录中的文件时会出现该错误。
正如其他人所提到的,将整个字符串用引号括起来,并作为参数传递给bash -c,以便在容器中处理它。

相关问题