经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Docker » 查看文章
Docker实现同Ip网段联通的实现
来源:jb51  时间:2018/12/24 10:44:02  对本文有异议

最近解决docker与宿主机同网段通信的问题,写此文章记录一下整个过程。

例如

宿主机A 和宿主机B是网络联通关系,在宿主机A上面创建了多个容器组成集群,但是我希望通过宿主机B也可以访问到宿主机A的容器,当然,你也可能会说,端口映射非常方便,如果我需要的端口比较多,或者着如果我临时需要增加某些端口,可能设置起来比较麻烦,那么如果我们将宿主机A里面的容器的IP与宿主机的IP在同一个网络,不就可以直接来进行互联互通了么。

1、安装Docker(Linux服务器)

安装 Docker

  1. yum install docker

2、 使用pipework为docker容器配置独立IP

安装pipework这个工具可以使用一条命令就可以实现更改容器的IP,更准确来说为容器IP添加一个新的网卡。

  1. wget https://github.com/jpetazzo/pipework/archive/master.zip
  2. unzip master.zip
  3. cp pipework-master/pipework /usr/local/bin/
  4. chmod +x /usr/local/bin/pipework

3、编辑IP的配置文件,eh0

编辑默认ip配置文件,eth0或者ens33(不同操作系统,名称不一致,例如我操作的这台机器的名称为ifcfg-ens33)
vim /etc/sysconfig/network-scripts/ifcfg-ens33

输入i进入到编辑模式,将下面的内容复制到文件中

  1. TYPE=Ethernet
  2. PROXY_METHOD=none
  3. BROWSER_ONLY=no
  4. BOOTPROTO=dhcp
  5. DEFROUTE=yes
  6. IPV4_FAILURE_FATAL=no
  7. IPV6INIT=yes
  8. IPV6_AUTOCONF=yes
  9. IPV6_DEFROUTE=yes
  10. IPV6_FAILURE_FATAL=no
  11. IPV6_ADDR_GEN_MODE=stable-privacy
  12. NAME=ens33
  13. UUID=36b40bc6-6775-4e02-8161-e245d0e3892f
  14. DEVICE=ens33
  15. #以下为桥接部分设置
  16. ONBOOT=yes
  17. BRIDGE=br0
  18. PEERDNS=yes
  19. PEERROUTES=yes
  20. IPV6_PEERDNS=yes
  21. IPV6_PEERROUTES=yes

4、创建自定义网桥br0

  1. vim ifcfg-br0

并且将配置内容复制到配置文件中

  1. DEVICE=br0
  2. BOOTPROTO=static
  3. NM_CINTROLLER=no
  4. ONBOOT=yes
  5. TYPE=Bridge
  6. IPADDR=192.168.186.128
  7. NETMASK=255.255.255.0

重启虚拟机网络服务

  1. systemctl restart network

5、修改docker配置文件,指定网桥

修改docker的配置文件/etc/sysconfig/

  1. vim /etc/sysconfig/docker

修改内容如下

  1. OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false'

修改为:

  1. OPTIONS='--selinux-enabled -b=br0'

修改完之后:

  1. # /etc/sysconfig/docker
  2.  
  3. # Modify these options if you want to change the way the docker daemon runs
  4. #OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false'
  5. OPTIONS='--selinux-enabled -b=br0'
  6. if [ -z "${DOCKER_CERT_PATH}" ]; then
  7. DOCKER_CERT_PATH=/etc/docker
  8. fi
  9.  
  10. # Do not add registries in this file anymore. Use /etc/containers/registries.conf
  11. # instead. For more information reference the registries.conf(5) man page.
  12.  
  13. # Location used for temporary files, such as those created by
  14. # docker load and build operations. Default is /var/lib/docker/tmp
  15. # Can be overriden by setting the following environment variable.
  16. # DOCKER_TMPDIR=/var/tmp
  17.  
  18. # Controls the /etc/cron.daily/docker-logrotate cron job status.
  19. # To disable, uncomment the line below.
  20. # LOGROTATE=false
  21.  
  22. # docker-latest daemon can be used by starting the docker-latest unitfile.
  23. # To use docker-latest client, uncomment below lines
  24. #DOCKERBINARY=/usr/bin/docker-latest
  25. #DOCKERDBINARY=/usr/bin/dockerd-latest
  26. #DOCKER_CONTAINERD_BINARY=/usr/bin/docker-containerd-latest
  27. #DOCKER_CONTAINERD_SHIM_BINARY=/usr/bin/docker-containerd-shim-latest
  28. other_args='-b br0'
  29.  

5、重启Docker服务

  1. systemctl restart docker

6、创建Docker容器实例

  1. docker run -itd --name test1 --net=none centos /bin/bash

--net=none代表容器的网卡都是为空的,需要通过pipework进行自定义指定

7、指定网卡

  1. pipework br0 test1 192.168.186.111/24@192.168.186.128

8、进入到容器,尝试Ping宿主机和同网段IP是否能够Ping通

  1. # 进入到容器
  2. docker attach test1
  3. # ping 宿主机
  4. ping 192.168.186.22

8.1 修改同网段主机ip

修改主机ip,网段与宿主机A网桥IP段保持一致。设置后,宿主机A,B之间可以互相ping通

  1. # ping 同网段Ip
  2. ping 192.168.186.33

到这里,就完成了Docker网络之间的通信。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号