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

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

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

$ 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

我可以通过指定完整路径来运行程序,但程序崩溃了,因为它需要从当前目录启动。我该怎么办?

答案1

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

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

答案2

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

docker run

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

因此,就您而言,您可以运行:

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

答案3

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

答案4

我在这个网站上有一个类似的例子https://djangostars.com/blog/what-is-docker-and-how-to-use-it-with-python/#header13

docker run -d --name "test-nginx" -p 8080:80 -v $(pwd):/usr/share/nginx/html:ro nginx:latest

此命令在 Git Bash 和 Windows 上不起作用。

解决方案是使用cd而不是$(pwd)

docker run -d --name "test-nginx" -p 8080:80 -v cd:/usr/share/nginx/html:ro nginx:latest

相关内容