由于工作需要, 需要给 Docker 设置固定 IP, 在网上的查找了一些资料, 自己试着实践一下, 留个笔记.
经常用 Docker 模拟项目在生产环境中的部署, 往往需要同时开好几台 Docker 容器, 而且有时安装的软件需要绑定 Docker 局域网中的其他容器, 如 MongoDB 副本集部署的时候, 就需要绑定其他容器的内网 IP.
但是, Docker 每次重启后, 容器的 IP 地址会变化, 查询了资料, Docker 是支持设置固定 IP 的.
Docker 默认网络
Docker 安装后, 默认会创建下面三种网络类型:
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
9781b1f585ae bridge bridge local
- 1252da701e55 host host local
- 237ea3d5cfbf none null local
启动 Docker 的时候, 用 --network 参数, 可以指定网络类型, 如:
~ docker run -itd --name test1 --network bridge --ip 172.17.0.10 centos:latest /bin/bash
bridge: 桥接网络
默认情况下启动的 Docker 容器, 都是使用 bridge,Docker 安装时创建的桥接网络, 每次 Docker 容器重启时, 会按照顺序获取对应的 IP 地址, 这个就导致重启下, Docker 的 IP 地址就变了
none: 无指定网络
使用 --network=none,docker 容器就不会分配局域网的 IP
host: 主机网络
使用 --network=host, 此时, Docker 容器的网络会附属在主机上, 两者是互通的.
例如, 在容器中运行一个 web 服务, 监听 8080 端口, 则主机的 8080 端口就会自动映射到容器中.
创建自定义网络:(设置固定 IP)
启动 Docker 容器的时候, 使用默认的网络是不支持指派固定 IP 的, 如下:
~ docker run -itd --net bridge --ip 172.17.0.10 centos:latest /bin/bash
6eb1f228cf308d1c60db30093c126acbfd0cb21d76cb448c678bab0f1a7c0df6
docker: Error response from daemon: User specified IP address is supported on user defined networks only.
因此, 需要创建自定义网络, 下面是具体的步骤:
步骤 1: 创建自定义网络
创建自定义网络, 并且指定网段: 172.18.0.0/16
~ docker network create --subnet=172.18.0.0/16 mynetwork
~ docker network ls
NETWORK ID NAME DRIVER SCOPE
9781b1f585ae bridge bridge local
1252da701e55 host host local
4f11ae9c85de mynetwork bridge local
237ea3d5cfbf none null local
步骤 2: 创建 Docker 容器
复制代码 代码如下:
~ docker run -itd --name networkTest1 --net mynetwork --ip 172.18.0.2 centos:latest /bin/bash
这个时候, 创建的 Docker 容器就会持有 172.18.0.2 这个 IP.
[root@ec8e31938fe7 /]# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:12:00:02
inet addr:172.18.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:acff:fe12:2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:88 errors:0 dropped:0 overruns:0 frame:0
TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
- collisions:0 txqueuelen:0
- RX bytes:4056 (3.9 KiB) TX bytes:1068 (1.0 KiB)
lo Link encap:Local Loopback
- inet addr:127.0.0.1 Mask:255.0.0.0
- inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
- collisions:0 txqueuelen:1
- RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
链接
Docker Container Networking https://docs.docker.com/engine/userguide/networking/#default-networks
为 Docker 容器指定自定义网段的固定 IP / 静态 IP 地址
来源: http://www.jb51.net/article/118396.htm