我有一个在docker中运行的服务。对于原因,我想对其并行运行一套测试,例如集成测试和性能测试。
我有一个看起来像这样的docker-compose.yaml:
# 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使用相同的服务实例?有没有更好的方法来达到相同的结果?
答案 0 :(得分:0)
我已经为自己解决了这个问题,我将在这里为以后遇到类似问题的任何人记录下来。
默认情况下,从服务发布端口是这里的问题。根据服务启动方式的上下文,端口是否可以发布。最好使用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