为什么我不能使用 docker run cd 到目录?

sch*_*mmd 58 docker

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

$ 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
Run Code Online (Sandbox Code Playgroud)

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

$ sudo docker run -i -t ubuntu/decomposer /bin/bash
# cd /local/deploy/decomposer; ./decomposer-4-15-2014
Run Code Online (Sandbox Code Playgroud)

我可以通过指定完整路径来运行我的程序,但是当它期望从当前目录启动时它会崩溃。我能做什么?

小智 124

您可以使用-w选项来更改您的工作目录。

docker run

  -w, --workdir=""           Working directory inside the container
Run Code Online (Sandbox Code Playgroud)

所以,在你的情况下,你会运行:

sudo docker run -w /local/deploy/decomposer -P ubuntu/decomposer ./decomposer-4-15-2014
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案 (8认同)
  • 该死的,为什么这一直隐藏在 [docker run 参考页面](https://docs.docker.com/engine/reference/run/#workdir) 的底部!:-) (3认同)

Glu*_*eon 50

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

sudo docker run -P ubuntu/decomposer /bin/sh -c 'cd /local/deploy/decomposer; ./decomposer-4-15-2014'
Run Code Online (Sandbox Code Playgroud)


Ran*_*ith 6

在 Dockerfile 中使用 WORKDIR 来设置工作目录。然后您可以使用 EXEC 运行您的命令。