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

时间:2015-10-06 21:08:15

标签: 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"]

docker run命令是:

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

3 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:2)

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

以下行将执行脚本/srv/www/bin/gunicorn.sh,因为它已在CMD中的Dockerfile指令中提供,作为默认值,在运行时内部执行/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

答案 2 :(得分:1)

对于使用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并将应用程序构建到dist。但是,对于原始问题,您可以在CLI中覆盖CMD。