首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为Docker容器分配静态IP

为Docker容器分配静态IP
EN

Stack Overflow用户
提问于 2015-01-14 14:45:49
回答 5查看 406.2K关注 0票数 251

我现在正在尝试在启动Docker容器时分配一个静态IP 172.17.0.1。

我使用端口2122作为这个容器的ssh端口,所以我让这个容器监听端口2122。

代码语言:javascript
复制
sudo docker run -i -t -p 2122:2122 ubuntu

此命令将运行一个随机IP为172.17.0.5的Docker容器,但我需要为该容器分配一个特定的IP。

下面的shell脚本是我在高级网络设置中参考的Docker文档。

代码语言:javascript
复制
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并链接到world fine。但是每当我尝试从本地ssh到这个容器时,它都不起作用。我遇到的问题可能是什么?

EN

回答 5

Stack Overflow用户

发布于 2016-11-13 19:19:18

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

代码语言:javascript
复制
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

在主机上,您可以使用以下命令进行测试:

代码语言:javascript
复制
docker-compose up -d
curl 172.20.128.2

现代docker-compose不会如此频繁地更改ip地址。

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

代码语言:javascript
复制
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

如果你想实现自动化,你可以使用类似这样的example gist

票数 116
EN

Stack Overflow用户

发布于 2018-10-05 17:53:06

这对我很有效。

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

运行docker镜像docker run --net selnet --ip 172.18.0.2 hub

起初,我得到了

代码语言:javascript
复制
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提高到第二个四倍。而不是.17。

票数 4
EN

Stack Overflow用户

发布于 2016-03-01 19:21:25

您可以在运行时设置IP。

代码语言:javascript
复制
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上的例子

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27937185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档