首页 > 解决方案 > Docker-Compose(如 Vagrant)的私有可寻址 IP

问题描述

问题

我正在使用 Docker-Compose 并想为其中一个容器设置一个可本地寻址的 IP(例如 10.1.1.100)。此 IP 不在我主机的子网中。

流浪风格

在一个类似的 Vagrant 项目中,有一行:

config.vm.network :private_network, ip: "10.1.2.100"

这在那个项目中效果很好。我可以将机器10.1.2.100作为目标,就好像它是我网络上的可用 IP 一样。我什至不必创建子网。

问题

我一直在寻找如何使用 Docker(特别是 Docker-Compose)设置具有本地可寻址 IP 的容器,但无法使其正常工作。

失败的配置

我已经尝试添加networks,并分配了一个静态 IP ipv4_address: 10.1.1.100。可悲的是,整个网络似乎只能通过 Docker 本身访问,而不是通过主机。

如果我尝试使用ports将 IP 公开为10.1.1.100:80:80,则会收到此错误:

无法启动服务 SERVICE_NAME:端口不可用:监听 tcp 10.1.1.100:80:绑定:无法分配请求的地址。

但如果我简单地说,这很好用80:80。所以一定是IP绑定导致了这个问题。

我还尝试network_mode仅设置此服务,但均未host正常bridge工作。

最后,我发现我可以添加driver_opts

com.docker.network.bridge.host_binding_ipv4: "10.1.1.100"

这使得无法启动类似于我在使用该ports方法时收到的相同错误的容器。

标签: dockerdocker-composevagrantdocker-networkingdocker-network

解决方案


推荐阅读