Docker配置指定IP(Ubuntu 16.04)

应用场景

  • 为了局域网内用户方便访问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启动或者重启之后,会自动显示出来。

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

参数说明

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                                                     ----删除创建的网桥

文章来源:https://www.cnaaa.net,转载请注明出处:https://www.cnaaa.net/archives/7447

(0)
杰斯的头像杰斯
上一篇 2023年2月28日 下午5:14
下一篇 2023年3月1日 下午4:50

相关推荐

  • 安装linux/Centos系统出现An Unknown Error Has Occurred报错原因和解决方法

    今天在给一个客户重装系统的时候出现: An Unknown Error Has OccurredThis program has encountered an unknown error. You may report the buy below or quit the program. This program has encountered an unk…

    2024年1月22日
    42300
  • find命令排除某些目录或文件

    使用-prune开关。例如,如果要排除misc目录,只需将a添加-path ./misc -prune -o到您的find命令中: find . -path ./misc -prune -false -o -name ‘*.txt’ 这是带有多个目录的示例: find . -type d \( -path dir1 -o -path dir2 -o -pat…

    2023年6月16日
    50600
  • Windows配置磁盘监控

    通过pushgateway的方式,主动推送监控数据给prometheus。 由于windows平台的诸多限制,导致推送比较艰难。有两种方法完成监控。 1.通过python等语言,做推送脚本。 2.曲线救国就是把监控数据scp发给Linux机器。再通过linux做二次加工推给pushgateway。 window server上配置环境 1.首先判断服务器磁盘…

    2022年11月25日
    35400
  • linux手误rm后恢复文件

    误删文件还原可以分为两种情况 今天只分析文件被删除后,相关进程还存在的情况 这种一般是有活动的进程存在持续标准输入或输出,到时文件被删除后,进程PID依旧存在。这也是有些服务器删除一些文件但是磁盘不释放的原因 案例演示 创建一个文件 用tail -f打开rumenz.txt文件 目的是让rumenz.txt被删除后,进程依然存在 新开一个终端删除rumenz…

    2023年10月17日
    34000
  • centos 升级内核

    一、关于内核版本的定义: 版本性质:主分支ml(mainline),稳定版(stable),长期维护版lt(longterm) 版本命名格式为 “A.B.C”: 数字 A 是内核版本号:版本号只有在代码和内核的概念有重大改变的时候才会改变,历史上有两次变化: 第一次是1994年的 1.0 版,第二次是1996年的 2.0 版,第三次是2011年的 3.0 版…

    2023年3月16日
    35000

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

在线咨询: QQ交谈

邮件:712342017@qq.com

工作时间:周一至周五,8:30-17:30,节假日休息

关注微信