我想在容器中运行此命令:java -jar bin/felix.jar > log.txt
如果我手动执行:
frog@gooseberry:~/path$ sudo docker run -it 5fe6598e0648 /bin/bash
root@9beabfb5e852:/path# java -jar bin/felix.jar > log.txt
[... program running ...]
一切正常,但如果我尝试用以下方式启动它:
frog@gooseberry:~/path$ sudo docker run -d 5fe6598e0648 "java -jar bin/felix.jar > log.txt"
我收到以下错误:
857bb5fcdbd7a315517bc9031d65b26abcaaad1fac7a29574e39a0289d0d77a3
2014/10/20 10:20:53 Error response from daemon: Cannot start container 857bb5fcdbd7a315517bc9031d65b26abcaaad1fac7a29574e39a0289d0d77a3: exec: "java -jar bin/felix.jar > log.txt": stat java -jar bin/felix.jar > log.txt: no such file or directory
如果我尝试使用引号''
而不是双逗号""
,我会收到同样的错误。
我想使用逗号,因为> log.txt
部分,否则将由主机上运行的终端解释。
This answer建议使用-c
的{{1}}选项。它绕过了问题(并且它可以工作),但是Docker为这个问题提供了一个解决方案吗?如何使用命令/bin/bash
管理命令行参数?
答案 0 :(得分:2)
'>'正在本地环境中解释。
这将有效:
sudo docker run -d 5fe6598e0648 -c "java -jar bin/felix.jar > log.txt"
默认入口点是/ bin / sh - 您可以使用-c选项将arg作为字符串传递给它。
Docker提供CLI选项,用于设置您自己的--entrypoint inline,这是Dockerfile ENTRYPOINT中的默认值。您可以将其中任何一个设置为包含-c。