我正在尝试为现有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
然后输入同样的命令,一切都很好。这里有什么我遗漏的吗?
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,并报告该目录不存在(在主机上,而不是容器上)。
/usr/local/src/scores.txt
rggaifut2#
您可以:
docker exec my_docker bash -c "printf '%sTest' >> /usr/local/src/test.txt"
以确保bash正在执行正确的命令。
f87krz0w3#
>>被Docker主机上的shell捕获。因此,它尝试将docker命令的结果输出到主机上的文件系统,而不是将printf命令的输出输出到容器内的文件系统。如果主机上不存在/usr/local/src/,则尝试输出到该目录中的文件时会出现该错误。正如其他人所提到的,将整个字符串用引号括起来,并作为参数传递给bash -c,以便在容器中处理它。
>>
docker
printf
/usr/local/src/
bash -c
3条答案
按热度按时间txu3uszq1#
这样做有一个很好的理由:它被解释为两个命令。请尝试将printf命令 Package 在命令字符串中:
关键是你使用了bash操作符,类似于你运行的任何时候:
“〉〉”操作符不作为参数传递给echo(像“one”和“two”那样),而是执行echo命令并将其输出附加到文件中。在本例中,“〉〉”操作符对docker exec执行相同的操作,并试图将结果输出到
/usr/local/src/scores.txt
,并报告该目录不存在(在主机上,而不是容器上)。rggaifut2#
您可以:
以确保bash正在执行正确的命令。
f87krz0w3#
>>
被Docker主机上的shell捕获。因此,它尝试将docker
命令的结果输出到主机上的文件系统,而不是将printf
命令的输出输出到容器内的文件系统。如果主机上不存在/usr/local/src/
,则尝试输出到该目录中的文件时会出现该错误。正如其他人所提到的,将整个字符串用引号括起来,并作为参数传递给
bash -c
,以便在容器中处理它。