【发布时间】:2019-12-15 07:12:12
【问题描述】:
这里是 docker-compose 文件:
app:
image: myimage
depends_on:
- nsqd
- localstack
command: ["run.sh"]
environment:
- "DYNAMODB=http://localstack:4569"
ports:
- 8080:8080
nsqd:
image: nsqio/nsq
command: /run
ports:
- "4150:4150"
- "4151:4151"
localstack:
image: localstack/localstack:latest
ports:
- 4569:4569
environment:
SERVICES: dynamodb
DATA_DIR: /tmp/localstack/data
HOSTNAME: localstack
这个 compose 文件在运行任何测试方法之前在 java junit test 中运行:
@Before
public void setUp() throws Exception {
new DockerComposeContainer(new File("docker-compose.yaml"))
.withExposedService("nsqd", 4150, Wait.forListeningPort())
.withExposedService("localstack", 4569, Wait.forListeningPort())
.withExposedService("app", 8080, Wait.forListeningPort())
.start();
}
当所有测试方法一一运行时,根本没有问题。但是当我尝试同时运行超过 2 个测试时,我 遇到这样的错误:
ERROR: for localstack Cannot start service localstack: driver failed programming external connectivity on endpoint hwfdrbmwpwn1_localstack_1 (e33d2a3098e74b1b8d87e3e595d9d9504ccddd4fe9c0605b20ebd3f22f50daa5): Bind for 0.0.0.0:4569 failed: port is already allocated
ERROR: for nsqlookupd Cannot start service nsqlookupd: driver failed programming external connectivity on endpoint hwfdrbmwpwn1_nsqlookupd_1 (fe62cec02a23a184d65b3f02776a14d77fdfbe639645ea0a11e07e8f11010e37): Bind for 0.0.0.0:4161 failed: port is already allocated
这些端口与withExposedService 功能不同。从另一端开始,撰写文件中的所有服务都在隔离网络中启动
所以不应该有任何冲突,但它们存在。任何 bpody 都可以解释端口发生了什么吗?
应该向测试容器提供哪些额外配置以同时多次运行 docker-compose 服务?
【问题讨论】:
标签: docker docker-compose testcontainers