我需要从特定目录运行应用程序。
$ 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