我在hetzner.de上有一个服务器,有大约16个公共IPv4地址。
现在我正在运行这样的容器:
sudo docker run -d --name test6 -it -p 5.1.2.3:80:80 sunebeck/apache-php
这最初会产生此错误:
Error starting userland proxy: listen tcp 5.1.2.3:80: bind: cannot assign requested address.
通过手动在主机上添加IP地址来解决此问题:
ip addr add 5.1.2.3 dev eth0
之后它按预期工作,服务在5.1.2.3上作为端口80公开。然而,手动管理它有点麻烦。
Docker能否根据需要自动添加/删除主机的IP地址?
答案 0 :(得分:1)
Docker本身无法做到这一点。除了一些例外(例如Docker在启动容器时创建的iptables规则),容器无法修改主机的网络环境。
解决此问题的最简单方法可能是安排在主机启动时将所有地址分配给接口,例如,使用Fedora / CentOS / RHEL上的ArrayList
或Debian上的/etc/sysconfig/network-scripts/ifcfg-<interface>
/ Ubuntu的。
这样,在Docker开始运行之前,地址将在接口上可用,并且您的端口绑定可以顺利运行。