我正在从docker-compose文件中旋转两个docker容器。一个容器正在运行服务,另一个容器正在运行以执行该服务的测试。 我的docker-compose如下所示:
version: "3"
services:
service-1:
build: <service_path>
image: <service_image>
container_name: service-container-1
networks:
docker_net_3:
ipv4_address: 192.168.8.2
test-executor-1:
build: <test_scripts_path>
image: <test_scripts_image>
container_name: test-container-1
networks:
docker_net_3:
ipv4_address: 192.168.8.1
networks:
docker_net_3:
driver: bridge
ipam:
config:
- subnet: 192.168.8.0/24
我想在具有不同网络的容器的同一台机器上使用相同的IP地址运行相同的设置。 这样我的测试就可以访问我在测试执行程序配置中指定的服务URL。
我尝试用相同的子网创建一个不同的docker网络,但失败并出现以下错误。
Creating network "test_executor_docker_net_3" with driver "bridge"
ERROR: Pool overlaps with other one on this address space
如何为多个容器设置相同的IP地址?
答案 0 :(得分:2)
您应该在这里做两件事:
在某些Docker Compose文件中,您可以将服务名称用作主机名。这是因为emcee's
parallel tempering sampler和Docker提供了内部DNS服务。
您要连接的服务的主机名实际上应该是可配置的。在您的示例中,您的测试环境非常脆弱,因为如果无法完全获得192.168.8.0/24网络,它将无法正常工作,因此我无法在台式机,非Docker VM上本地运行此测试, ....
这应该使您陷入根本不关心这些IP地址的情况。您确实需要修改测试服务以了解环境变量。但是否则,与您显示的内容相同的docker-compose.yml
文件将是
version: "3"
services:
service-1:
build: <service_path>
test-executor-1:
build: <test_scripts_path>
environment:
SERVICE_URL: 'http://service-1/'
(最明显的机械问题是,从Linux主机或VM,您可以直接访问Docker内部的IP地址,因此,如果多个容器想要具有相同的地址,则不清楚哪个容器192.168.8.1是。您还可以将容器连接到多个网络,它们会在每个网络中获得一个IP地址,以防止网络共享地址范围。