docker-composeで特定のコンテナーのみ


161

私はdocker-compose.ymlいくつかのコンテナを含むものを持っています。3つは私のアプリ(クライアント、サーバー、データベース)用で、残りはさまざまな開発ツール(psql、npm、manage.pyなど)用です。実行すると、docker-compose upすべてが開始されますが、3つの主要なものだけを開始したいと思います。私が指定したリンクのため、これらの3つだけで開始できdocker-compose up clientますが、出力はその1つのコンテナーからのみです。それで、次のいずれかを行う方法はありますか?

  1. どのコンテナで起動するかをdocker-composeに指示します docker-compose up
  2. リンクされているすべてのコンテナから出力を取得します docker-compose up client

1
ドキュメントによると:docker-compose up [options] [SERVICE...]リストしたいサービスのサブセットを開始できます。
ジェシーチザム

回答:


257

以下を使用してコンテナーを開始できます。

$ docker-compose up -d client

これはバックグラウンドでコンテナを実行し、出力はから利用可能になります

$ docker-compose logs

開始されたすべてのコンテナで構成されます


11
完璧です。ログをstdoutにエコー表示したい場合は、-dフラグをドロップするだけ
Natus Drew

依存関係コンテナーが既に実行されていて、再起動したくない場合、依存コンテナーを開始することはできますか?
majTheHero

43

docker-composeファイルで定義された特定のサービスを開始します。たとえば、docker-compose.ymlがある場合

sudo docker-compose start db  

次のような構成ファイルが与えられた場合:

version: '3.3'

services:
   db:
     image: mysql:5.7
     ports:
       - "3306:3306"
     volumes:
       - ./db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: yourPassword
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: yourPassword

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "80:80"
     volumes:
       - ./l3html:/var/www/html
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: yourPassword
volumes:
    db_data:
    l3html:

スイート全体を開始する前に、mySQLのみを開始したい場合があります(データベースにデータを入力したいだけの場合もあります)。


9
なぜsudo以前docker-compose ...?それは必要ではないですよね?
Jochem Schulenklopper

1
ユーザーをdockerグループに含めない場合は、yesが必要になります。
delpo

sudo docker-compose up db 代わりに使用した場合の違い sudo docker-compose start db
Luk Aron

3
@LukAron- startコンテナーが既に存在し、それを開始することを前提とし、up必要に応じてイメージをプルし、必要に応じてコンテナーを作成してから、コンテナーを開始します。
ジェシーチザム


4

1つの適切な解決策は、次のように必要なサービスのみを実行することです。

docker-compose up --build $(<services.txt)

そしてservices.txtファイルはこのようになります:

services1 services2, etc

もちろん、依存関係(depends_on)の場合、関連するサービスを一緒に実行する必要があります。

たとえば、-buildはオプションです。


0

docker-composev1.5 以降ではフラグを使用して複数のdocker-compose.ymlファイル-f渡すことができます。これにより、開発ツールを個別に分割して、docker-compose.ymlオンデマンドでのみ含めることができます。

# start and attach to all your essential services
docker-compose up

# execute a defined command in docker-compose.dev.yml
docker-compose -f docker-compose.dev.yml run npm update

# if your command depends_on a service you need to include both configs
docker-compose -f docker-compose.yml -f docker-compose.dev.yml run npm update

これに関する詳細な議論についてはdocker / compose#1896を参照してください。

これをより便利に実現する機能を追加するプルリクエストを作成しましたが(docker / compose#7548)、これにはコンポーズファイルの仕様を変更する必要があるため、compose-spec / compose-spec#で説明します。 87


-1

あなたは通常これをしたくありません。Docker Composeでは、アプリを構成するサービスを定義ます。npmそしてmanage.pyちょうど管理コマンドです。それらのコンテナは必要ありません。必要な場合、たとえばを使用してデータベーステーブルを作成するmanage.py場合は、次のことを行うだけです。

docker-compose run client python manage.py create_db

Herokuが使用する1回限りのdynoと考えてください。

これらの管理コマンドを個別のコンテナーとして扱う必要がある場合(およびこれらに対してDocker Composeを使用する必要がある場合)、個別の.ymlファイルを作成し、次のコマンドでDocker Composeを起動できます。

docker-compose up -f my_custom_docker_compose.yml

15
多くの人がこれをしたいと思っています。
kojiro

8
@ msrd0通常、これを実行したくないですか?人々が自分で決めましょう!
クリス

1
SOには、理由を説明せずに反対投票できない規則があるはずです。これ(または少なくとも最初の部分)は最も理にかなっているため、考えられるすべての管理コマンド用に追加のコンテナーを持つことは非常に奇妙です。
宣言
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.