使用docker compose抑制docker网络以隔离测试执行

使用docker compose抑制docker网络以隔离测试执行,docker,testing,networking,docker-compose,isolation,Docker,Testing,Networking,Docker Compose,Isolation,如何禁止docker compose向上映射到主机IP范围(对于多个实例)? 上下文:我希望在Jenkins中运行单元测试,在那里我们在主设备和每个从设备上都有一个docker引擎 我想为单元集成测试启动一些容器,并在测试结束后关闭它们 我希望多个测试能够同时运行同一个docker compose文件,而不会产生争用 第二次执行: docker-compose -f "my-test-docker-compose.yml" -p "34cd832b7" up -d -t 100 我发现第一个网

如何禁止docker compose向上映射到主机IP范围(对于多个实例)?

上下文:我希望在Jenkins中运行单元测试,在那里我们在主设备和每个从设备上都有一个docker引擎

我想为单元集成测试启动一些容器,并在测试结束后关闭它们

我希望多个测试能够同时运行同一个docker compose文件,而不会产生争用

第二次执行:

docker-compose -f "my-test-docker-compose.yml" -p "34cd832b7" up -d -t 100
我发现第一个网络绑定到0.0.0.0/,这会在第二次执行时导致冲突

Cannot start service zookeeper: driver failed programming external connectivity on endpoint 34cd832b7_zookeeper_1 (c2b928530cfdc7aee17): Bind for 0.0.0.0:22181 failed: port is already allocated
尝试在每个服务和底部添加网络,然后使用
docker network create
创建网络。到目前为止还没有骰子

理想情况下,您需要一个不需要更改docker-compose.yml文件的解决方案,因为这会给测试人员带来负担

是否有方法抑制容器与主机IP范围之间的任何映射,然后结合使用
docker ps
docker inspect
从网络外部获取IP

理想是:

c, err := docker.New("my-test-docker-compose.yml")
//handle err
c.Up()
//connect to a service..
s, err := service1.New(c.GetSocket("serv:1234"))
//handle connection error

//do testing 

c.Down()
任何建议都是理想的。唯一的选择可能是重新处理每个docker-compose.yml以删除所有外部网络映射,这很痛苦,或者在docker中生成一个docker以完全隔离网络。痛苦

任何关于如何在很大程度上指定
--network=none
的建议都会很好,这样我们就不会得到0.0.0.0/绑定。我注意到在这个区域有一个golang docker库(libcompose),但遗憾的是它不再被维护

谢谢,

亚历克斯

好的,我已经解决了这个问题(事实上这要归功于一位队友)

解决方案是将docker-compose.yml文件中的
端口替换为
expose

听起来很简单,但结果如下:

之前:(HTML表格)

集装箱ID…港口
75a45ac5ef62…0.0.0.0:9094->9094/tcp,0.0.0:33919->9092/tcp,0.0.0.0:33918->9093/tcp,0.0.0.0:33917->22888/tcp
1920786d77ed…0.0.0.0:9092->9092/tcp,0.0.0.0:33909->9093/tcp,0.0.0.0:33908->9094/tcp

如果服务仅在测试过程中相互通信,您实际上不需要主机映射,那么您可以在测试中禁用这些映射吗?
c, err := docker.New("my-test-docker-compose.yml")
//handle err
c.Up()
//connect to a service..
s, err := service1.New(c.GetSocket("serv:1234"))
//handle connection error

//do testing 

c.Down()