web-dev-qa-db-ja.com

docker run行でCMDコマンドをオーバーライドする方法

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
13
Hetdev

それを行う正しい方法は、cmd ["..."]を削除することです

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

Dockerfileは、実行されるコンテナのデフォルトを許可するCMD命令を使用します。

以下の行は、スクリプト/srv/www/bin/gunicorn.shをデフォルト値としてCMDDockerfile命令ですでに提供しているため、実行時に内部的に/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

4
askb

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をオーバーライドできます。

1
Dylan Pierce