搬运工人运行搬运工人运行(docker run )

2019-05-12 17:44发布

我试图像这样运行多个命令。

docker run image cd /path/to/somewhere && python a.py

但是,这给了我“没有这样的文件或目录”的错误,因为它被解释为...

"docker run image cd /path/to/somewhere" && "python a.py"

似乎需要一些转义字符,如“”或()。

所以,我也尝试过

docker run image "cd /path/to/somewhere && python a.py"
docker run image (cd /path/to/somewhere && python a.py)

但这些并没有工作。

我已经寻找泊坞运行参考 ,但没有找到有关转义字符的任何提示。

Answer 1:

要运行在泊坞窗,使用多个命令/bin/bash -c和分号;

docker run image /bin/bash -c "cd /path/to/somewhere; python a.py"

在情况下,我们需要的命令2(蟒蛇),当且仅当命令1(CD)返回零(没有错误)退出状态,将使用执行&&代替;

docker run image /bin/bash -c "cd /path/to/somewhere && python a.py"


Answer 2:

为此,您可以通过两种方式:

  1. 使用-w选项更改工作目录:

    -w,--workdir =“”在容器内部工作目录

    https://docs.docker.com/engine/reference/commandline/run/#set-working-directory--w

  2. 传递整个参数为/ bin / bash的:

     docker run image /bin/bash -c "cd /path/to/somewhere; python a.py" 


Answer 3:

你也可以多克尔容器内管的命令, bash -c "<command1> | <command2>" ,例如:

docker run img /bin/bash -c "ls -1 | wc -l"

但是,没有在远程调用壳的输出将被重定向到本地终端。



Answer 4:

如果你希望将结果储存在容器外的一个文件,在本地机器,你可以做这样的事情。

RES_FILE=$(readlink -f /tmp/result.txt)

docker run --rm -v ${RES_FILE}:/result.txt img bash -c "cat /etc/passwd | grep root > /result.txt"

你的命令的结果将是可用/tmp/result.txt在本地机器上。



Answer 5:

对于谁比谁来到这里寻找做同样的docker-compose你只需要预先设置bash -c并附多个命令在引号,再加上加入&&

所以在OPS例如docker-compose run image bash -c "cd /path/to/somewhere && python a.py"



文章来源: docker run