如何在docker run命令中管理命令行参数?

时间:2014-10-20 08:48:54

标签: command-line-arguments docker

我想在容器中运行此命令: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管理命令行参数?

1 个答案:

答案 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。