为什么我无法使用docker run进入CD目录?


39

我需要从特定目录运行应用程序。

$ sudo docker run -P ubuntu/decomposer 'cd /local/deploy/decomposer; ./decomposer-4-15-2014'
2014/10/09 21:30:03 exec: "cd /local/deploy/decomposer; ./decomposer-4-15-2014": stat cd /local/deploy/decomposer; ./decomposer-4-15-2014: no such file or directory

该目录绝对存在,如果我通过交互式运行bash连接到docker,则可以运行以上命令。

$ sudo docker run -i -t ubuntu/decomposer /bin/bash
# cd /local/deploy/decomposer; ./decomposer-4-15-2014

我可以通过指定完整路径来运行程序,但是由于预期会从当前目录启动而导致崩溃。我能做什么?

Answers:


34

将您的命令作为参数传递给/ bin / sh,如下所示:

sudo docker run -P ubuntu/decomposer /bin/sh -c 'cd /local/deploy/decomposer; ./decomposer-4-15-2014'

docker运行centos / bin / sh -c'cd / bin; / bin / ls'不输出任何内容,而docker run centos / bin / sh -c'/ bin / ls / bin'可以工作。
seanmcl 2014年

实际上,这两个命令都输出/ bin目录中的文件列表。都尝试了。
胶粘剂2014年

不是在我的盒子上,centos7。
seanmcl 2014年

1
实际上,即使只是删除命令周围的引号也可以正常运行。我认为docker还是将其包装起来/bin/sh -c
schmmd 2014年

85

您可以使用-woption更改您的工作目录。

docker run

  -w, --workdir=""           Working directory inside the container

因此,就您而言,您将运行:

sudo docker run -w /local/deploy/decomposer -P ubuntu/decomposer ./decomposer-4-15-2014

我可以-wdocker exec吗?我正在寻找一种在容器中运行python脚本的方法,但无法在容器外将其停止。
zx1986

哦,我得到了答案..flag provided but not defined: -w
zx1986

1
该死的为什么一直一直隐藏在docker run参考页面的底部!:-)
阿米尔·阿比里

5
这应该是公认的答案
fferri


0

这可能是由于权限问题引起的,或者实例无法找到可执行文件的可用路径。要进行检查,请尝试在路径中添加可执行文件的可用位置,然后尝试运行脚本

要在路径中添加当前目录,请使用以下命令

$ export PATH=$PATH:
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.