为了账号安全,请及时绑定邮箱和手机立即绑定

将静态IP分配给Docker容器

将静态IP分配给Docker容器

Qyouu 2019-07-29 14:27:27
将静态IP分配给Docker容器我现在尝试在启动Docker容器时分配静态IP 172.17.0.1。我使用端口2122作为此容器的ssh端口,以便我让这个容器监听端口2122。sudo docker run -i -t -p 2122:2122 ubuntu此命令将运行具有随机IP(如172.17.0.5)的Docker容器,但我需要为容器分配特定的IP。以下shell脚本是我在高级网络设置中引用Docker文档的内容。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/$pidsudo ip link add A type veth peer name Bsudo brctl addif docker0 Asudo ip link set A upsudo ip link set B netns $pidsudo ip netns exec $pid ip link set eth0 downsudo ip netns exec $pid ip link delete eth0sudo ip netns exec $pid ip link set dev B name eth0sudo ip netns exec $pid ip link set eth0 address 12:34:56:78:9a:bcsudo ip netns exec $pid ip link set eth0 downsudo ip netns exec $pid ip link set eth0 upsudo ip netns exec $pid ip addr add 172.17.0.1/16 dev eth0sudo ip netns exec $pid ip route add default via 172.17.42.1这个shell脚本将分配一个静态IP 172.17.0.1并链接到世界正常。但每当我尝试从我的本地ssh到这个容器时,它都无法正常工作。我遇到的问题是什么?
查看完整描述

3 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

对于docker-compose您可以使用以下docker-compose.yml

version: '2'services:
  nginx:
    image: nginx
    container_name: nginx-container
    networks:
      static-network:
        ipv4_address: 172.20.128.2networks:
  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 -dcurl 172.20.128.2

Modern docker-compose会自动为您创建具有静态IP的容器。

docker-compose在一行中查找所有容器的静态ips,请使用:

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

如果你想自动化,你可以使用类似这个例子gist的东西


查看完整回答
反对 回复 2019-07-29
?
FFIVE

TA贡献1797条经验 获得超6个赞

不是直接的答案,但它可以帮助。

我使用下一种方法运行大多数与自己的静态ips绑定的dockerized服务:

  1. 我为docker主机上的所有服务创建了ip别名

  2. 然后我运行每个服务将这个ip的端口重定向到容器中,这样每个服务都有自己的静态ip,可以被外部用户和其他容器使用。

样品:

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


查看完整回答
反对 回复 2019-07-29
  • 3 回答
  • 0 关注
  • 605 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信