ai0*_*307 218 docker docker-image
我正在尝试运行这样的MULTIPLE命令.
docker run image cd /path/to/somewhere && python a.py
Run Code Online (Sandbox Code Playgroud)
但这给了我"没有这样的文件或目录"错误,因为它被解释为......
"docker run image cd /path/to/somewhere" && "python a.py"
Run Code Online (Sandbox Code Playgroud)
似乎需要一些像""或()这样的ESCAPE字符.
所以我也试过了
docker run image "cd /path/to/somewhere && python a.py"
docker run image (cd /path/to/somewhere && python a.py)
Run Code Online (Sandbox Code Playgroud)
但这些都行不通.
我搜索了Docker Run Reference但没有找到有关ESCAPE字符的任何提示.
anh*_*hlc 392
要在docker中运行多个命令,请使用/bin/bash -c和分号;
docker run image_name /bin/bash -c "cd /path/to/somewhere; python a.py"
Run Code Online (Sandbox Code Playgroud)
如果我们需要command2(python)将被执行当且仅当command1(cd)返回零(无错误)退出状态时,使用&&而不是;
docker run image_name /bin/bash -c "cd /path/to/somewhere && python a.py"
Run Code Online (Sandbox Code Playgroud)
Joh*_*one 27
您可以通过以下几种方式执行此操作:
使用-w选项更改工作目录:
-w, - workdir =""容器内的工作目录
https://docs.docker.com/engine/reference/commandline/run/#set-working-directory--w
将整个参数传递给/ bin/bash:
docker run image /bin/bash -c "cd /path/to/somewhere; python a.py"
Run Code Online (Sandbox Code Playgroud)您还可以在Docker容器内通过管道传递命令,bash -c "<command1> | <command2>"例如:
docker run img /bin/bash -c "ls -1 | wc -l"
Run Code Online (Sandbox Code Playgroud)
但是,在不调用远程shell的情况下,输出将被重定向到本地终端。
只是为了从 @Eddy Hernandez 的评论中做出正确的回答,这是非常正确的,因为 Alpine 带有 ash 而不是 bash。
现在的问题是指在 Docker Alpine 容器中启动 shell,这意味着使用shor ashor /bin/shor /bin/ash/。
根据OP的问题:
docker run image sh -c "cd /path/to/somewhere && python a.py"
TL;博士;
$ docker run --entrypoint /bin/sh image_name -c "command1 && command2 && command3"
Run Code Online (Sandbox Code Playgroud)
关于已接受答案的担忧如下。
没有人提到docker run image_name /bin/bash -c只是将命令附加到入口点。一些流行的图像足够智能,可以正确处理此问题,但有些则不然。
想象一下以下 Dockerfile:
FROM alpine
ENTRYPOINT ["echo"]
Run Code Online (Sandbox Code Playgroud)
如果您尝试将其构建为echo并运行:
$ docker run echo /bin/sh -c date
Run Code Online (Sandbox Code Playgroud)
您会将命令附加到入口点,因此结果将为echo "/bin/sh -c date".
相反,您需要覆盖入口点:
$ docker run --entrypoint /bin/sh echo -c date
Run Code Online (Sandbox Code Playgroud)
小智 6
bash -c如果您正在运行的命令相对简单,则效果很好。但是,如果您尝试运行一长串充满控制字符的命令,它会变得很复杂。
我通过将我的命令从外部管道传输到进程中成功地解决了这个问题,即
cat script.sh | docker run -i <image> /bin/bash
| 归档时间: |
|
| 查看次数: |
125550 次 |
| 最近记录: |