分配静态IP,以泊坞容器分配静态IP,以泊坞容器(Assign static IP to Docke

2019-05-10 10:51发布

现在,我想分配静态IP 172.17.0.1当码头工人容器启动。

我使用端口2122,因为这容器的SSH端口,这样我让这个容器监听端口2122。

sudo docker run -i -t -p 2122:2122 ubuntu

此命令会运行一个随机的IP像172.17.0.5码头工人,容器,但我需要一个特定的IP分配给容器。

下面的脚本是我引用泊坞文档中先进的网络设置。

pid=$(sudo docker inspect -f '{{.State.Pid}}' <container_name> 2>/dev/null)
sudo rm -rf /var/run/netns/*
sudo ln -s /proc/$pid/ns/net /var/run/netns/$pid
sudo ip link add A type veth peer name B
sudo brctl addif docker0 A
sudo ip link set A up
sudo ip link set B netns $pid
sudo ip netns exec $pid ip link set eth0 down
sudo ip netns exec $pid ip link delete eth0
sudo ip netns exec $pid ip link set dev B name eth0
sudo ip netns exec $pid ip link set eth0 address 12:34:56:78:9a:bc
sudo ip netns exec $pid ip link set eth0 down
sudo ip netns exec $pid ip link set eth0 up
sudo ip netns exec $pid ip addr add 172.17.0.1/16 dev eth0
sudo ip netns exec $pid ip route add default via 172.17.42.1

此shell脚本将分配静态IP 172.17.0.1,并链接到世界罚款。 但每当我尝试ssh到从我的地方这个容器,也没有工作。 有什么问题可能是我见过面吗?

Answer 1:

易与多克尔版本1.10.1,构建9e83765。

首先,你需要创建自己的网络泊坞窗(mynet123)

docker network create --subnet=172.18.0.0/16 mynet123

不是简单地运行图像(我要的Ubuntu为例)

docker run --net mynet123 --ip 172.18.0.22 -it ubuntu bash

然后在Ubuntu壳

ip addr

此外,您可以使用

  • --hostname指定主机名
  • --add-host更多的条目添加到/ etc / hosts文件

文档(为什么你需要创建一个网络)在https://docs.docker.com/engine/reference/commandline/network_create/



Answer 2:

对于docker-compose你可以用下面的docker-compose.yml

version: '2'
services:
  nginx:
    image: nginx
    container_name: nginx-container
    networks:
      static-network:
        ipv4_address: 172.20.128.2
networks:
  static-network:
    ipam:
      config:
        - subnet: 172.20.0.0/16
          #docker-compose v3+ do not use ip_range
          ip_range: 172.28.5.0/24

从主机您可以测试使用:

docker-compose up -d
curl 172.20.128.2

现代docker-compose会自动建立静态IP为你的容器。

要查找您所有容器的静态IP地址docker-compose在单行使用:

for s in `docker-compose ps -q`; do echo ip of `docker inspect -f "{{.Name}}" $s` is `docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $s`; done

如果你想实现自动化,您可以使用这样的例子要点



Answer 3:

没有一个直接的答案,但它可以帮助。

我跑我的大部分依赖于自己的使用下一个方法静态IP地址dockerized服务:

  1. 我创建搬运工主机上的所有服务网络IP别名
  2. 然后我运行的每个服务从该IP端口重定向到容器中,以便每个服务有可能由外部用户和其他容器中使用自己的静态IP地址。

样品:

docker run --name dns --restart=always -d -p 172.16.177.20:53:53/udp dns
docker run --name registry --restart=always -d -p 172.16.177.12:80:5000 registry
docker run --name cache --restart=always -d -p 172.16.177.13:80:3142 -v /data/cache:/var/cache/apt-cacher-ng cache
docker run --name mirror --restart=always -d -p 172.16.177.19:80:80 -v /data/mirror:/usr/share/nginx/html:ro mirror
...


Answer 4:

这对我的作品。

创建与网络docker network create --subnet=172.17.0.0/16 selnet

运行搬运工图像docker run --net selnet --ip 172.18.0.2 hub

起初我

docker: Error response from daemon: Invalid address 172.17.0.2: It does not belong to any of this network's subnets. ERRO[0000] error waiting for container: context canceled

解决方法:增加了IP [.18第二个翻两番。 而不是0.17。]



Answer 5:

我试图dockerise 的avahi这需要知道它的公网IP正常工作的过程中偶然发现了这个问题。 分配静态IP的容器是棘手的,由于缺乏静态IP地址分配支持在多克。

本文介绍了技术如何将静态IP分配给在容器Debian的 :

  1. 泊坞窗服务应启动DOCKER_OPTS="--bridge=br0 --ip-masq=false --iptables=false" 。 我认为br0桥已经配置。

  2. 容器应开始--cap-add=NET_ADMIN --net=bridge

  3. 内侧容器pre-up ip addr flush dev eth0/etc/network/interfaces可用于驳回多克尔分配的IP地址,如下面的例子:


auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    pre-up ip addr flush dev eth0
    address 192.168.0.249
    netmask 255.255.255.0
    gateway 192.168.0.1
  1. 集装箱的入口脚本应该首先/etc/init.d/networking start 。 同时进入脚本需要编辑或填充/etc/hosts ,以消除对码头工人分配的IP的引用文件。


Answer 6:

你可以同时运行它设置IP。

docker run --cap-add=NET_ADMIN -dit imagename /bin/sh -c "/sbin/ip addr add 172.17.0.12 dev eth0; bash"

见我的例子https://github.com/RvdGijp/mariadb-10.1-galera



Answer 7:

你可以通过自己的名字访问其他集装箱的服务( ping apache将获得IP或curl http://apache将访问HTTP服务),这可以是静态IP的替代品。



Answer 8:

如果你想你的容器有它自己的虚拟以太网插口(与它自己的MAC地址),iptables的,然后使用Macvlan驱动程序。 这可能需要将流量路由出去你/ ISP的路由器。

https://docs.docker.com/engine/userguide/networking/get-started-macvlan



文章来源: Assign static IP to Docker container
标签: docker