run¶
Usage: run [options] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]
Options:
-d Detached mode: Run container in the background, print
new container name.
--entrypoint CMD Override the entrypoint of the image.
-e KEY=VAL Set an environment variable (can be used multiple times)
-u, --user="" Run as specified username or uid
--no-deps Don't start linked services.
--rm Remove container after run. Ignored in detached mode.
-p, --publish=[] Publish a container's port(s) to the host
--service-ports Run command with the service's ports enabled and mapped to the host.
-T Disable pseudo-tty allocation. By default `docker-compose run` allocates a TTY.
サービスに対して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