Docker 容器运行的时候默认会自动分配一个默认网桥所在网段的 IP 地址. 但很多时候我们可能需要让容器运行在预先指定的静态 IP 地址上, 因为早期的版本不支持静态 IP, 因此网上大部分方法都是借助 pipework 等去实现, 然而在最新的版本中, Docker 已经内嵌支持在启动时指定静态 IP 了.
Docker 守护进程启动以后会创建默认网桥 docker0, 其 IP 网段通常为 172.17.0.1. 在启动 Container 的时候, Docker 将从这个网段自动分配一个 IP 地址作为容器的 IP 地址. 最新版 (1.10.3) 的 Docker 内嵌支持在启动容器的时候为其指定静态的 IP 地址. 这里分为三步:
第一步: 安装最新版的 Docker
备注: 操作系统自带的 docker 的版本太低, 不支持静态 IP, 因此需要自定义安装.
- root@localhost:~# apt-get update
- root@localhost:~# apt-get install curl
- root@localhost:~# curl -fsSL https://get.docker.com/ | sh
- root@localhost:~# docker -v
Docker version 1.10.3, build 20f81dd
第二步: 创建自定义网络
备注: 这里选取了 172.18.0.0 网段, 也可以指定其他任意空闲的网段
docker network create --subnet=172.18.0.0/16 shadownet
注: shadown 为自定义网桥的名字, 可自己任意取名.
第三步: 在你自定义的网段选取任意 IP 地址作为你要启动的 container 的静态 IP 地址
备注: 这里在第二步中创建的网段中选取了 172.18.0.10 作为静态 IP 地址. 这里以启动 shadowsocks 为例.
docker run -d -p 2001:2001 --net shadownet --ip 172.18.0.10 oddrationale/docker-shadowsocks -s 0.0.0.0 -p 2001 -k 123456 -m aes-256-cfb
其他
备注 1: 这里是固定 IP 地址的一个应用场景的延续, 仅作记录用, 可忽略不看.
备注 2: 如果需要将指定 IP 地址的容器出去的请求的源地址改为宿主机上的其他可路由 IP 地址, 可用 iptables 来实现. 比如将静态 IP 地址 172.18.0.10 出去的请求的源地址改成公网 IP104.232.36.109(前提是本机存在这个 IP 地址), 可执行如下命令:
iptables -t nat -I POSTROUTING -o eth0 -d 0.0.0.0/0 -s 172.18.0.10 -j SNAT --to-source 104.232.36.109
来源: https://blog.csdn.net/xiaoliuliu2050/article/details/53494927