docker-compose.ymlでサービスを無効にする方法はありますか


91

docker-composeファイル内のサービスを一時的に無効にしたいという状況に陥っています。

もちろんコメントすることもできますが、「enabled: false」とだけ言うオプションはありますか?


4
答えは次のとおりです。「それは」...あなたが達成しようとしていることに依存します。実行docker-compose upすると、デフォルトですべてのサービスが開始されます。ただし、実行docker-compose up myserviceすると、myserviceとそれに依存するものが開始されます。依存関係を設定することで、このコマンドで不正なサービスが開始されないようにすることができます。docker-compose run必要なサービスだけを取得することもできます。正しい選択は、これを複数の作成ファイルに分割して、必要な柔軟性を実現することでもあります。
ポールベコット2016年

私が持っていたのと同様のニーズを処理するために、docker -compose upのdepends_onとservice引数、または--no-deps依存関係を開始したくない場合のオプションを試してみます。私はあなたが探しているものではないことを知っていますが、その逆です。
ゴンザロ

もう1つのオプションは、必要な数のdocker-composeファイルを作成し、それらのどれを呼び出しに含めるかを選択することですdocker-compose -f docker-compose.yml -f another-docker-compose.yml up -d。あなたはと結果のドッキングウィンドウのコンマージを確認することができconfigコマンドdocker-compose -f docker-compose.yml -f another-docker-compose.yml config
ゴンサロ


@EshaanBansal私はそのような機能を知りません。
VonC

回答:


42

entrypointまたはcommandを再定義して、上記のコマンドを何もしないものに置き換えることができます(/bin/true

これにより、コンテナはすぐに終了し、何もしません。


shadiは、コメントに次のヒントを追加します。

サービスをまったくビルドしたくない場合は、ビルドキーを再定義して、次のDockerfileものだけを指すようにします。

FROM tianon/true 
ENTRYPOINT ["/true"]

5andr0はコメントトップレベルセクションを指摘していますx-disabled:(拡張フィールドのような)を

はるかに便利:無効なサービスをトップレベルのセクションに移動する x-disabled:代わりににservices:

x-接頭辞が付いたセクションは解析されますが、拡張フィールドとして意図された方法で使用されていない場合は無視されます。


15
また、restart: "no"無限の再起動を回避するために追加/変更します
DUzun 2017年

2
このサービスを無効にしたい理由が、サービスを開始することさえできないためである場合、これは役に立ちません。私の場合、postgresの別のインスタンスが実行されているため、postgresが起動せず、portsコマンドによって競合が発生します。定義を変更し始めることもできますが、その時点で全体をコメントアウトする方が簡単です。
blueFast 2018

1
はるかに便利:トップレベルのセクションに無効なサービスを動かすx-disabled:のではなくservices:
5andr0

@ 5andr0興味深い。そのdocker-composeセクションのドキュメントはありますか?
VonC

docs.docker.com/compose/compose-file/#extension-fieldsはv3.4で導入されました。x-プレフィックスが付いたセクションは解析されますが、拡張フィールドとして意図した方法で使用されていない場合は無視されます
5andr0 2010

63

あなたはdocker-compose.override.yamlファイルでそれをすることができます。

このファイルは自動的に読み取られdocker-compose、mainにマージされdocker-compose.yamlます。

Gitから除外している場合、各開発者は元のを変更せずに構成を微調整できます(いくつかの制限があります)docker-compose.yaml

したがって、次のfooエントリポイントを再定義することで、サービスをアドホックで無効にすることができますdocker-compose.override.yaml

version: "3"

services:
  foo:
    entrypoint: ["echo", "Service foo disabled"]

1
その外などのコメントを「停止しない限り、再起動」、またはそれが継続的に再起動されます、あなたは持っている場合
アンドレアス・

アイデアは、オーバーライドファイルのエントリポイントを変更することです。再起動ポリシーがある場合は、それを無限のスリープループに変更します
KosProv19年

明確にするために、VonCの回答のようにdocker-compose.ymlでこれを行うことができます。チェックインして他の開発者と共有したい場合は、これが適切です。また、compose file format v1は、「サービス」のサブキーではなく、サービス名(上記の例ではfoo)をトップレベルのキーとして受け入れます。
デニス・ハウ

1
このソリューションは、-fオプションを使用して環境ごとに異なるオーバーライドファイルを指定している特定の環境(開発/ステージング/本番環境など)でサービスを無効化/有効化する場合にうまく機能します。
ジャスティンエメリー

:私たちは無効化サービスのためのenvを使用することができドッキングウィンドウ・コンV3、すなわちと export XXX_ENTRYPOINT=/bin/true 、その後`エントリポイント:[ "$ {XXX_ENTRYPOINT:-docker-entrypoint.sh}"]`
QXO

9

一時的に無効にしたいサービスに次の行を追加します。

command: echo "{put your service name here} disabled"

とにかく開始しますが、何もしません。


6
を再定義しcommandても、エントリポイントには影響しません。あなたの例では、あなたentrypointbashそれが私が推測するものであると信じています。ビルトインのこの弾力性((独立を作るためにentrypoint)私はあなたがエントリポイントではなく、コマンドを再定義する必要があると思う。
blueFast

4

Dockerのcomposeyamlファイルで定義されたサービスを無効にする方法はありません。VonCの提案は良い回避策です利用可能なオプションについては、以下のdockercomposeドキュメントを参照してください https://docs.docker.com/compose/compose-file/



-2

わかった:

docker-compose up $(yq -r '.services | keys | join(" ")' docker-compose.yml | sed 's/service-name//')

これは、私がリクエストから期待したとおりに行われます。簡単に理解することはできませんが、私の場合は十分に機能し、いくつかのスクリプトに統合できます。
ビルキッドウェル

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.