如何在docker运行行中覆盖CMD命令

Het*_*dev 12 cmd docker dockerfile

如何根据docker文档替换cdm:https: //docs.docker.com/reference/builder/#cmd

您可以覆盖CMD命令

Dockerfile:

RUN chmod +x /srv/www/bin/* & chmod -R 755 /srv/www/app
RUN pip3 install -r /srv/www/app/pip-requirements.txt
EXPOSE 80
CMD ["/srv/www/bin/gunicorn.sh"]
Run Code Online (Sandbox Code Playgroud)

docker run命令是:

docker run --name test test/test-backend
Run Code Online (Sandbox Code Playgroud)

我试过了

docker run --name test test --cmd ["/srv/www/bin/gunicorn.sh"]
docker run --name test test cmd ["/srv/www/bin/gunicorn.sh"]
Run Code Online (Sandbox Code Playgroud)

但控制台说这个错误:

System error: exec: "cmd": executable file not found in $PATH
Run Code Online (Sandbox Code Playgroud)

Het*_*dev 11

正确的做法是删除cmd ["..."]

 docker run --name test test/test-backend /srv/www/bin/gunicorn.sh
Run Code Online (Sandbox Code Playgroud)


ask*_*skb 6

Dockerfile用途CMD正在被执行的指令,其允许所述容器的默认值。

下面的行将执行脚本,/srv/www/bin/gunicorn.sh因为它已经CMD在您的指令中Dockerfile作为默认值提供,它/bin/sh -c /srv/www/bin/gunicorn.sh在运行时在内部执行。

 docker run --name test test/test-backend 
Run Code Online (Sandbox Code Playgroud)

现在说如果你想运行其他东西,只需在docker run. 现在应该运行下面的行bash

docker run --name test test/test-backend /bin/bash
Run Code Online (Sandbox Code Playgroud)

参考:Dockerfile 最佳实践