2016-10-06 18 views
1

私はMac用ドッカーを使用して、自分のdocker-compose.ymlファイルを持っている別のリポジトリに3種類の「microservices」を持っています。サービス自体はドッカーでは実行されませんが、各サービスで使用されるデータベース(postgresql、minio、redisなど)を呼び出すために使用されるdocker-compose.ymlファイルがあります。これにより、私が孤立してサービスを簡単に処理できるようになります。docker-compose.yml設定間のポート衝突を回避するには?

しかし、同時にcd service1 && docker-compose up -d && cd service2 && docker-compose up -dため、ポートの競合の2つのサービスを持参することは困難です。たとえば、service1がPostgreSQLを起動し、それをポート5432に公開し、service2が同じ処理を実行したい場合、2番目のdocker-compose upコマンドは失敗します。

両方のサービスが同じPosgtreSQLコンテナを共有しても問題ありませんが、ドッカーが「使用可能な場合はservice1からデータベースを使用するか、そうでなければ新しいコンテナを作成する」と言うことが可能かどうかはわかりません。

別の解決策は、各サービスが固有のポートを持っていることをそれぞれ確保するためだろうが、それはより多くのスタックが使用されているドッキングウィンドウは、構成としてのトラックを保つことが困難な場合があります。

ワークフローのこの種を管理するために何かアドバイスをいただければ幸いです。

私のドッキングウィンドウ-compose.ymlのいずれかのファイルがどのように見えるかですここでは、助け場合

:私は、このコマンドでそれを持ち出す

minio: 
    image: minio/minio 
    ports: 
    - "9000:9000" 
    volumes: 
    - ./test/.minio/data:/export 
    - ./test/.minio/config:/root/.minio 
    environment: 
    - "MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE" 
    - "MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" 
    - "MINIO_ENABLE_FSMETA=true" 

createbucket: 
    image: garland/aws-cli-docker 
    links: 
    - minio 
    command: > 
    /bin/sh -c " 
     while ! wget -q -s http://minio:9000/minio/login; do sleep 1; done; 
     aws configure set default.s3.signature_version s3v4; 
     aws configure set default.region us-east-1; 
     aws s3api create-bucket \ 
     --bucket service1-test \ 
     --endpoint-url=http://minio:9000; 
     exit 0; 
    " 
    environment: 
    - "AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE" 
    - "AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" 

db: 
    image: postgres:9.5 
    ports: 
    - "5432:5432" 

createdb: 
    image: postgres:9.5 
    links: 
    - db 
    command: > 
    /bin/bash -c " 
     while ! psql --host=db --username=postgres; do sleep 1; done; 
     psql --host=db --username=postgres -c 'CREATE DATABASE \"service1-test\";'; 
    " 

services: 
    image: alpine:3.2 
    links: 
    - db 
    - minio 
    command: /bin/true 

docker-compose up createdb && docker-compose up createbucket && docker-compose up -d services

+0

問題は、コンテナとホスト上のサービスを統合しているので、あなたは多くのオプションを持っていません。明示的なポートを公開することも、コンテナに明示的なIPアドレスを使用することもできますが、いずれかを管理するのは難しいでしょう。コンテナとしてサービスを実行した場合でも、その依存関係と同じDockerネットワークで実行され、ポートを公開する必要はありません。 –

+1

はい、確かです。一時的な解決策として、共有docker-compose.ymlを作成し、そのサービスをexternal_linksで参照しました。私はNode.jsのを使用していたように、私は自動的に共有サービス(https://github.com/blockai/blockai-dc)立ち上げるNPMスクリプトを作ったが、それは明らかに100%のドッキングウィンドウ-構成する唯一のソリューションではありません。 –

+0

私はデータベース用のdocker-compose.ymlのみを使用している理由は、ドッカーの 'npm install'が最後に試した(と私は頻繁に依存関係を追加/削除しています)、nodemonは正しく動作しませんでしたこれが改善された場合には、もう一度お試しください。 –

答えて

0

は、これはあなたが使用する何かのように思えますのためのthe extends directive。これは、サービスを結びつける4番目のdocker-compose.ymlファイルを作成することを意味し、その中で共有サービスも再定義できます。

関連する問題