web-dev-qa-db-ja.com

Docker-Composeを使用して、構成が異なるコンテナーの複数のインスタンスをスピンアップする

ユーザーがdocker-composeでscaleコマンドを使用して複数のコンテナーをスピンアップできることを理解しています。ただし、すべて同じ構成が使用されます。

同じホスト上で、異なる構成(異なる.ymlファイル)同じホスト上?

次のコマンドを使用します。

docker-compose -f dev.yml up -d
docker-compose -f qa.yml up -d

だけ qa.ymlコンテナが実行されますが、これは私が望むものではありません。

-編集-

両方のコマンドを実行しようとするとどうなりますか。

$ docker-compose -f compose/dev.yml up -d
compose_mydocker_1 is up-to-date
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES
905912df6e48        compose_mydocker  "/sbin/my_init"     2 days ago          Up 2 days           0.0.0.0:1234->80/tcp   compose_mydocker_1
$ docker-compose -f compose/qa.yml up -d
Recreating compose_mydocker_1...
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES
3fc912201224        compose_mydocker  "/sbin/my_init"     5 seconds ago       Up 5 seconds        0.0.0.0:1235->80/tcp   compose_mydocker_1

俺の qa.ymlおよびdev.yml こんな風に見える:

mydocker: 
  build: ..

  ports:
    - "1234:80" #for dev.yml
   #- "1235:80" for qa.yml
  environment:
    - ENVIRONMENT=dev #and vice-versa for qa

  volumes:
    - ../assets/images:/var/www/assets
23
Nepoxx

あなたがする必要があるのは、プロジェクト名を変更することです。デフォルトでは、composeは現在のディレクトリに基づいた名前のプロジェクトを使用します。あなたの場合、別々の環境が必要なので、異なるプロジェクト名が必要です。

環境でdocker-compose -p <project_name>を使用するか、COMPOSE_PROJECT_NAMEを設定できます。

プロジェクト名を永続化する方法を提供することについての議論もあります: https://github.com/docker/compose/issues/745

42
dnephin