我现在正在尝试在启动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/$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到这个容器时,它都不起作用。我遇到的问题可能是什么?
发布于 2016-11-13 19:19:18
对于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地址。
要在一行中查找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
如果你想实现自动化,你可以使用类似这样的example gist
发布于 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
起初,我得到了
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。
发布于 2016-03-01 19:21:25
您可以在运行时设置IP。
docker run --cap-add=NET_ADMIN -dit imagename /bin/sh -c "/sbin/ip addr add 172.17.0.12 dev eth0; bash"
https://stackoverflow.com/questions/27937185
复制相似问题