避免docker-compose.ymlconfiguration之间的端口冲突?

我正在使用Docker for Mac,并在具有自己docker-compose.yml文件的单独存储库中有3个不同的“微服务”。 服务本身不在docker-compose.yml运行,但是有一个docker-compose.yml文件,用于启动每个服务使用的数据库(例如postgresql,minio和redis)。 这使我能够轻松地单独处理这些服务。

但是,很难同时使用两个服务cd service1 && docker-compose up -d && cd service2 && docker-compose up -d由于端口冲突。 例如,如果service1启动PostgreSQL并将其公开到端口5432,并且service2希望这样做,则第二个docker docker-compose up命令将失败。

这两个服务共享相同的PosgtreSQL容器是可以接受的,但我不确定是否可以告诉docker-compose“如果可用或者创build一个新的容器,则使用service1中的数据库”。

另一个解决scheme是确保每个服务都有一个独特的端口,但是随着越来越多的docker组合堆栈的使用,难以跟踪。

任何意见pipe理这种工作stream程将不胜感激。

如果有帮助,以下是我的一个docker-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

这看起来像你会使用extends指令 。 这意味着要创build第四docker-compose.yml文件,将你的服务连接在一起,在这里你可以重新定义共享服务。