如何将静态公共IP分配给docker容器

fir*_*lyu 29 docker

有没有办法将static public IP容器分配给容器.所以容器有公共IP.客户端可以使用IP访问容器.

Von*_*onC 25

现在应该可以使用docker 1.10和您现在看到的docker run --ip选项docker network connect.

如果指定,则在重新启动已停止的容器时重新应用容器的IP地址.如果IP地址不再可用,则容器无法启动.

保证IP地址可用的一种方法是指定--ip-range创建网络的时间,并从该范围外选择静态IP地址.这可确保在此容器不在网络上时,不会将IP地址提供给另一个容器.

$ docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 multi-host-network

$ docker network connect --ip 172.20.128.2 multi-host-network container2
Run Code Online (Sandbox Code Playgroud)

另见Jessie Frazelle的博客文章" 所有事物的IP ",并请求docker/docker#19001.


lar*_*sks 20

对于目前已发布的Docker版本,这是不可能的(没有很多手工工作在Docker背后),尽管很少需要.

Docker通过使用端口映射在容器中公开网络服务,端口映射可以绑定到主机上的特定IP地址.因此,如果您想在一个Web服务器192.168.10.10和另一个Web服务器上192.168.10.20,请首先确保您的主机上有这些地址:

ip addr add 192.168.10.10/24 dev eth0
ip addr add 192.168.10.20/24 dev eth0
Run Code Online (Sandbox Code Playgroud)

然后启动第一个容器:

docker run -p 192.168.10.10:80:80 mywebserver
Run Code Online (Sandbox Code Playgroud)

最后启动第二个容器:

docker run -p 192.168.10.20:80:80 mywebserver
Run Code Online (Sandbox Code Playgroud)

在上面的命令中,该-p选项用于将端口映射绑定到特定的ip地址.现在,您有两个容器在同一端口(端口80)上提供服务,但在不同的IP地址上.


P M*_*cki 6

由于这个问题出现在流行的搜索中(docker分配ip容器等),(当前)接受的答案已经过时,并且@VonC的正确答案有些不确定(包括讨论),让我们用一个例子来总结一下它是如何实现的完成以及结果是什么:

docker run -d nginx:latest  #--> container with id be46...
docker network create --subnet 10.30.0.0/24 --ip-range 10.30.0.0/24 multi-host-network
docker network connect --ip 10.30.0.4 multi-host-network be46
Run Code Online (Sandbox Code Playgroud)

现在容器已10.30.0.4/24连接;您可以ping 10.30.0.4从运行命令的主机上进行。之后docker stop be46ping 不再起作用,然后docker start be46ping 再次成功。在主机上创建以下路由:

10.30.0.0/24 dev br-b74e7b452f23 proto kernel scope link src 10.30.0.1
Run Code Online (Sandbox Code Playgroud)

(所以楼主假设10.30.0.1)。

注意:这完成了“将给定 IP 分配给容器”的任务,但目前我还不清楚是否可以在“docker swarm”上下文中执行此操作,并实现与我们在那里相同级别的冗余(使用端口到服务的分配)。