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

如何根据Docker文档replacecdm: 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"] 

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因为它已经在你的Dockerfile中的CMD指令中提供了默认值,这个默认值在/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最佳实践

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

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

在我的情况下,我正在重复使用相同的docker服务来运行我的反应应用程序的开发和生产版本:

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

将运行我的webpack.config.production.js并build立应用程序的dist 。 但是,对于原始问题,您可以在CLI中覆盖CMD。