run

使い方: run [オプション] [-e キー=バリュー...] サービス [コマンド] [引数...]

オプション:
-d                    デタッチド・モード: コンテナをバックグラウンドで実行し、新しいコンテナ名を表示
--name NAME           コンテナに名前を割り当て
--entrypoint CMD      イメージのエントリーポイントを上書き
-e KEY=VAL            環境変数を指定 (複数回指定できる)
-u, --user=""         実行時のユーザ名または uid を指定
--no-deps             リンクしたサービスを起動しない
--rm                  コンテナ実行後に削除。デタッチド・モードの場合は無視
-p, --publish=[]      コンテナのポートをホスト側に公開
--service-ports       サービス用のポートを有効化し、ホスト側に割り当て可能にする
-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