应用场景
- 为了局域网内用户方便访问docker实例中服务
- Docker每次重启,IP地址不会消失
1. Docker网络模式概览
junli@ubuntu16:~$ docker network list
NETWORK ID NAME DRIVER SCOPE
c53fad18e45b bridge bridge local
944636e5a53e host host local
ade481fd388f none null local
说明:
- bridge 桥接网络 默认网络类型,容器内不特殊指定,就用此类型。不特殊指定的话,分配的ip为172.17.0.x
- none 无指定网络 容器内不指定局域网ip
- host 主机网络 和主机共用一个ip,会出现和宿主机争抢端口情况,非特殊需要尽量少用
最常用的就是利用bridge,自定义虚拟网桥来固定IP。默认情况下,docker的容器重启之后,会自动分配IP,导致一次重启IP变化。所以需要对docker容器指定IP。由于docker默认的网络不能固定ip地址,我们创建自定义虚拟网桥,进行固定IP的分配
2. 创建自定义网络
junli@ubuntu16:~$ docker network create --subnet=192.168.120.0/24 DockerNetBridge
3. 查看网络信息
junli@ubuntu16:~$ docker network inspect DockerNetBridge
junli@ubuntu16:~$ docker network list
NETWORK ID NAME DRIVER SCOPE
f27f780cc924 DockerNetBridge bridge local
c53fad18e45b bridge bridge local
944636e5a53e host host local
ade481fd388f none null local
创建网桥之后,使用ifconfig查看会多出一个网桥,该网桥在docker启动或者重启之后,会自动显示出来。文章来源:https://www.toymoban.com/news/detail-519666.html
junli@ubuntu16:~$ ifconfig
br-f27f780cc924 Link encap:以太网 硬件地址 02:42:57:f8:de:1d
inet 地址:192.168.120.1 广播:192.168.120.255 掩码:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 跃点数:1
接收数据包:0 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:0 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:0
接收字节:0 (0.0 B) 发送字节:0 (0.0 B)
docker0 Link encap:以太网 硬件地址 02:42:7b:33:b2:35
inet 地址:172.17.0.1 广播:172.17.255.255 掩码:255.255.0.0
inet6 地址: fe80::42:7bff:fe33:b235/64 Scope:Link
......
4. 创建容器并指定容器IP,在自定义的网段选取任意IP作为启动容器的IP
junli@ubuntu16:~$ docker run --runtime=nvidia -i -d --net GJLDockerNetBridge --ip 192.168.120.10 --name test -v /home/junli/GJLImages/test/:/GJL/data/ nvidia/cuda:8.0-devel /bin/bash
junli@ubuntu16:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6a16c4565832 nvidia/cuda:8.0-devel "/bin/bash" 2 minutes ago Up 2 minutes test
参数说明文章来源地址https://www.toymoban.com/news/detail-519666.html
docker run -i -d --net NetBridgeName --ip 192.168.120.x --name test -v 本地主机文件位置:容器文件位置 REPOSITORY:TAG /bin/bash
--runtime=nvidia 使用显卡就添加,不用可以不添加
--net 网桥名字
--ip 分配各容器的IP
--name 容器名字
-v 本地工作目录:docker工作目录
5. 运行容器,测试本机和容器是否ping通
junli@ubuntu16:~$ docker exec -it test /bin/bash
root@6a16c4565832:/# apt-get update
root@6a16c4565832:/# apt install iputils-ping
root@6a16c4565832:/# ping 192.168.1.116
PING 192.168.1.116 (192.168.1.116) 56(84) bytes of data.
64 bytes from 192.168.1.116: icmp_seq=1 ttl=64 time=0.056 ms
64 bytes from 192.168.1.116: icmp_seq=2 ttl=64 time=0.108 ms
64 bytes from 192.168.1.116: icmp_seq=3 ttl=64 time=0.103 ms
......
最后,对相关操作总结
docker network create --subnet=x.x.x.0/24 netBridgeName(网桥名称,随便写即可) ----创建网桥
docker run -itd --network=netBridgeName --ip x.x.x.8 --name dockerName imageName ----指定ip
docker network list ----查看docker下网络模式
docker network rm netBridgeName ----删除创建的网桥
到了这里,关于三、Docker配置指定IP(Ubuntu 16.04)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!