docker-compose run
読む時間の目安: 2 分
Usage:
docker-compose run [options] [-v VOLUME...] [-p PORT...] [-e KEY=VAL...] [-l KEY=VALUE...]
SERVICE [COMMAND] [ARGS...]
Options:
-d, --detach Detached mode: Run container in the background, print
new container name.
--name NAME Assign a name to the container
--entrypoint CMD Override the entrypoint of the image.
-e KEY=VAL Set an environment variable (can be used multiple times)
-l, --label KEY=VAL Add or override a label (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.
--use-aliases Use the service's network aliases in the network(s) the
container connects to.
-v, --volume=[] Bind mount a volume (default [])
-T Disable pseudo-tty allocation. By default `docker-compose run`
allocates a TTY.
-w, --workdir="" Working directory inside the container
利用方法:
docker-compose run [オプション] [-v VOLUME...] [-p PORT...] [-e KEY=VAL...] [-l KEY=VALUE...]
SERVICE [COMMAND] [ARGS...]
オプション:
-d, --detach コンテナーをバックグラウンドで実行し、実行された新たな
コンテナー ID を表示します。
--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 擬似 TTY への割り当てを無効にします。デフォルトにおいて
`docker-compose run` には TTY が割り当てられます。
-w, --workdir="" コンテナー内のワーキングディレクトリを指定します。
1 つのサービスに対して、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
別の方法として--publish
または-p
オプションを使って手動によるポートマッピングが指定できるので、docker run
の実行時に以下のようにすることもできます。
docker-compose run --publish 8080:80 -p 2022:22 -p 127.0.0.1:2021:21 web python manage.py shell
リンクが設定されているサービスを起動すると、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
上のコマンドはデータベースのアップデートスクリプトを実行します。 そして終了時にはコンテナーを削除します。 サービス設定において再起動ポリシーが設定されていても、その設定は無視されます。
fig, composition, compose, docker, orchestration, cli, run