Docker compose 仅当docker未启动时才启动它
我有一个在docker中运行的服务。出于某些原因,我想在它上并行运行一套测试,例如集成测试和性能测试 我有一个docker-compose.yaml,看起来像这样:Docker compose 仅当docker未启动时才启动它,docker-compose,Docker Compose,我有一个在docker中运行的服务。出于某些原因,我想在它上并行运行一套测试,例如集成测试和性能测试 我有一个docker-compose.yaml,看起来像这样: # My service - the thing under test in this scenario service: ports: - 4000:4000 ... # Integration tests integration: depends_on: - service ... #
# My service - the thing under test in this scenario
service:
ports:
- 4000:4000
...
# Integration tests
integration:
depends_on:
- service
...
# Performance tests
performance:
depends_on:
- service
...
我想继续公开4000,以便docker world之外的组件可以与之交互。但是,当我并行运行这些测试时,其中一个测试会出现此错误
无法启动服务。。。0.0.0.0:4000失败:端口已在使用中
这是因为docker compose正在尝试为每个测试启动一个服务。是否可以告诉docker compose使用相同的服务实例?有没有更好的方法来达到同样的效果?我已经为自己解决了这个问题,我将在这里为将来面临类似问题的任何人记录它 默认情况下,从服务发布端口是这里的问题。根据服务启动方式的上下文,可以发布或不发布端口。最好使用docker子网在docker容器之间进行通信 docker-compose.yaml现在看起来更像这样:
service:
# no ports declaration
...
integration:
depends_on:
- service
environment:
- SERVICE_URL=http://service:4000
...
performance:
depends_on:
- service
environment:
- SERVICE_URL=http://service:4000
...
相反,端口会在需要时发布,无论启动服务的是什么:
docker-compose run -p 4000:4000 service
我已经为自己解决了这个问题,我将在这里为将来面临类似问题的任何人记录它 默认情况下,从服务发布端口是这里的问题。根据服务启动方式的上下文,可以发布或不发布端口。最好使用docker子网在docker容器之间进行通信 docker-compose.yaml现在看起来更像这样:
service:
# no ports declaration
...
integration:
depends_on:
- service
environment:
- SERVICE_URL=http://service:4000
...
performance:
depends_on:
- service
environment:
- SERVICE_URL=http://service:4000
...
相反,端口会在需要时发布,无论启动服务的是什么:
docker-compose run -p 4000:4000 service