如何pipe理docker run命令中的命令行参数?

我想在容器中运行这个命令: 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部分,否则将由主机上运行的terminal解释。

这个答案build议使用/bin/bash-c选项。 它绕过了这个问题(而且工作正常),但是Docker提供了这个问题的解决scheme吗? 如何使用命令docker run来pipe理命令行参数?

“>”在本地环境中得到解释。

这将工作:

 sudo docker run -d 5fe6598e0648 -c "java -jar bin/felix.jar > log.txt" 

默认入口点是/ bin / sh – 你可以通过-c选项将arg作为string传递给它。

Docker提供CLI选项来设置你自己的–entrypoint内联,这是Dockerfile入口点的一个默认值。 你可以设置其中的任何一个来包含-c。