docker-compose run¶
使い方:
docker-compose run [オプション] [-v ボリューム...] [-p ポート...] [-e KEY=VAL...] [-l KEY=VALUE...]
サービス [コマンド] [引数...]
オプション:
-d, --detach デタッチド・モード: コンテナをバックグラウンドで実行し、新しいコンテナ名を表示
--name NAME コンテナに名前を割り当て
--entrypoint CMD イメージのエントリーポイントを上書き
-e KEY=VAL 環境変数を指定 (複数回指定できる)
-l, --label KEY=VAL ラベルの追加または上書き (複数回指定できる)
-u, --user="" 実行時のユーザ名または uid を指定
--no-deps リンクしたサービスを起動しない
--rm コンテナ実行後に削除。デタッチド・モードの場合は無視
-p, --publish=[] コンテナのポートをホスト側に公開
--service-ports サービス用のポートを有効化し、ホスト側に割り当て可能にする
--use-aliases コンテナが接続するネットワークで、ネットワークでのサービス名エイリアス(別名)を使う
-v, --volume=[] ボリュームのバインドマウント(デフォルト [])
-T 疑似ターミナル (pseudo-tty) 割り当てを無効化。デフォルトの `docker-compose run` は TTY を割り当て
-w, --workdir="" コンテナ内の作業ディレクトリを指定
サービスに対して1回コマンドを実行します。たとえば、次のコマンドは web
サービスを開始するためのコマンドで、サービス内で bash
としてコマンドを実行します。
docker-compose run web bash
run
コマンドを使うと、設定ファイルで定義された通りに、サービスとして新しいコンテナを開始します。また、定義されているボリューム、リンク、その他の詳細も持ちます。しかし、ここでは2つの重要な違いがあります。
1つは、 run
コマンドの指定は、サービス設定ファイル上での定義を上書きします。たとえば、 web
サービスは bash
で開始する設定だとしても、 docker-compose run web python app.py
を実行すると、 python app.py
で上書きします。
2つめの違いとして、 docker-compose run
コマンドはサービス設定ファイルで指定したポートを作成しません。これは、既に開いているポートとの衝突を避けるためです。サービス用のポートを作成し、ホスト側に割り当てるには、 --service-ports
フラグを使います。
docker-compose run --service-ports web python manage.py shell
別の方法として、手動でポートの割り当てを設定することも可能です。Docker で run
コマンドを使う時と同様に、 --publish
または -p
オプションを使うだけです。
docker-compose run --publish 8080:80 -p 2022:22 -p 127.0.0.1:2021:21 web python manage.py shell
リンク機能を使ってサービスを開始する場合、 run
コマンドはリンク先のサービスが実行中かどうかをまず確認し、サービスが停止していれば起動します。全てのリンク先のサービスが起動したら、指定したコマンドで run
命令が実行されます。たとえば、次のように実行できます。
docker-compose run db psql -h db -U docker
これはリンクしている db
コンテナに対して、PostgreSQL シェルで操作をします。
run
コマンドを実行するとき、リンクしているコンテナを起動したくない場合は --no-deps
フラグを使います。
docker-compose run --no-deps web python manage.py shell
コンテナの再起動ポリシーを上書きし、コンテナの実行後に削除したい場合は --rm
フラグを使います。
docker-compose run --rm web python manage.py db upgrade
このデータベース更新スクリプトを実行すると、サービス設定で再起動ポリシーが指定されていたとしても、処理の実行が終了したらコンテナを削除します。
参考
- docker-compose run