我正在使用Docker for Mac并拥有3种不同的"微服务"在具有自己的docker-compose.yml
文件的单独存储库中。服务本身不在docker中运行,但有一个docker-compose.yml
文件,用于调出每个服务使用的数据库(例如postgresql,minio和redis)。这使我很容易孤立地处理服务。
但是,由于端口冲突,很难同时引入2个服务cd service1 && docker-compose up -d && cd service2 && docker-compose up -d
。例如,如果service1调出PostgreSQL并将其暴露给端口5432并且service2想要执行相同操作,则第二个docker-compose up
命令将失败。
两个服务共享同一个PosgtreSQL容器是可以接受的,但是我不确定是否可以告诉docker-compose"如果它可以使用来自service1的数据库"可用或以其他方式创建新容器"。
另一个解决方案是确保每个服务都有一个唯一的端口,但随着越来越多的docker-compose堆栈的使用,这可能很难跟踪。
任何有关管理此类工作流程的建议都将受到赞赏。
如果有帮助,请参阅我的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
答案 0 :(得分:0)
这似乎是您使用the extends
directive的内容。这意味着要创建第四个docker-compose.yml
文件,将您的服务绑定在一起,您可以在其中重新定义共享服务。