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

How to override the CMD command in the docker run line

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

您可以覆盖 CMD 命令

Docker 文件:

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"]

docker运行命令是:

docker run --name test test/test-backend

我试过了

docker run --name test test --cmd ["/srv/www/bin/gunicorn.sh"]
docker run --name test test cmd ["/srv/www/bin/gunicorn.sh"]

但是控制台说这个错误:

System error: exec: "cmd": executable file not found in $PATH

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

 docker run --name test test/test-backend /srv/www/bin/gunicorn.sh

Dockerfile 使用 CMD 指令允许正在执行的容器的默认值。

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

 docker run --name test test/test-backend 

现在说如果你想 运行 其他东西,只需在 docker run 的末尾添加。现在下面一行应该 运行 bash 代替。

docker run --name test test/test-backend /bin/bash

参考:Dockerfile Best Practices

对于那些使用 docker-compose 的人:

docker-compose run [your-service-name-here-from-docker-compose.yml] /srv/www/bin/gunicorn.sh

在我的例子中,我将相同的 docker 服务重新用于 运行 我的 React 应用程序的开发和生产构建:

docker-compose run my-react-app npm run build

将 运行 我的 webpack.config.production.js 并将应用程序构建到 dist。但是,对于最初的问题,您可以在 CLI 中覆盖 CMD。

在您的 Dockerfile

中试试这个
CMD ["sh" , "-c", "command && bash"]