热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

修改docker默认网关

docker教程:本文为大家分享了修改docker默认网关的方法,具有一定的参考价值,希望可以帮助到大家。

文章背景:

我们在局域网中使用Docker,最常遇到的一个困惑,就是有时候跨网段结果出现网络不通。原因是因为Docker默认生成的网关和我们的局域网网段有时候是冲突的,比如在172.16网段的机器上部署Docker,结果生成的docker0网桥是172.17网段,那么就和真实环境中使用该网段的机器冲突了(即ping不通172.17网段的机器)。

(推荐教程:docker教程)

为了避免冲突,首先想到的是改网关,举例如下(以Centos为例):

service docker stop
# 删除docker防火墙过滤规则
iptables -t nat -F POSTROUTING
# 删除docker默认网关配置
ip link set dev docker0 down
ip addr del 172.17.0.1/16 dev docker0
# 增加新的docker网关配置
ip addr add 192.168.2.1/24 dev docker0
ip link set dev docker0 up
# 检测是否配置成功,如果输出信息中有 192.168.5.1,则表明成功
ip addr show docker0
service docker start
# 验证docker防火墙过滤规则

这么改完,是否就可靠了?答案是否定的,因为docker重启后,可能还是会重建docker0,覆盖我们所做的修改。说明Docker的IP规则就是写死的,不让我们随便更改。但我们就换个思路,直接干掉docker0,重建一个新的网桥:

首先需要安装网桥创建工具brctl:

sudo yum install -y bridge-utils

开始创建操作:

# 1.停止 Docker 服务
service docker stop
 
# 2.创建新的网桥(新的网段)
brctl addbr bridge0
ip addr add 192.168.2.1/24 dev bridge0
ip link set dev bridge0 up
 
# 3.确认网桥信息
ip addr show bridge0
# 4.修改配置文件
/etc/docker/daemon.json(如不存在则创建一个 touch daemon.json),使Docker启动时使用自定义网桥
 
{
  "bridge": "bridge0"
}
# 5.重启 Docker
service docker start
    
# 确认 NAT 网络路由
iptables -t nat -L -n
 
# 6.删除不再使用的网桥
ip link set dev docker0 down
 
brctl delbr docker0
 
iptables -t nat -F POSTROUTING

关于第4步所做的修改配置,就是引用新的网桥,其实还可以在docker配置文件中引用新的网桥:

echo 'DOCKER_OPTS="-b=bridge0"' >> /etc/sysconfig/docker
sudo service docker start

但是不代表我们一定能看到docker自定义配置文件,如果没有default/docker或sysconfig/docker,比较麻烦,解决方法如下:

$ vi /lib/systemd/system/docker.service
#添加一行
$ EnvirOnmentFile=-/etc/default/docker
或者
$ EnvirOnmentFile=-/etc/sysconfig/docker
#-代表ignore error
 
#并修改
$ ExecStart=/usr/bin/docker daemon -H fd://
#改成
$ ExecStart=/usr/bin/docker daemon -H fd:// $DOCKER_OPTS
#这样才能使用/etc/default/docker里定义的DOCKER_OPTS参数
 
$ systemctl daemon-reload 重载
$ sudo service docker restart

完成了bridge0的创建和从docker0过度到bridge0,那么我们就可以route一下,以确认是否有我们不想看到的172.17网段:

只要没有,那么我们就不但心和172.17网段的机器连通了。如果还有,那么再用 ip addr del 172.17.0.1/16 dev docker0,直到清除完毕(因为已经建立新的docker网桥,所以删除旧的不会影响docker使用)。

如果重启机器后brctl所创建的网桥可能丢失,那么我们可以将以下命令写到linux自启动脚本中,每次重启的时候执行一遍:

brctl addbr bridge0
ip addr add 192.168.2.1/24 dev bridge0
ip link set dev bridge0 up

自启动脚本可以通过在/etc/rc.local文件中添加可执行语句(如 sh /opt/script.sh &)。这样基本上每次重启机器后,也能保证bridge0被创建,确保docker服务正常启动。

另外:如果只是为了解决IP网段冲突,又不愿意操作以上复杂的过程,其实也可以只改/etc/docker/daemon.json,通过添加内容 "bip": "ip/netmask",来实现docker0网桥的网段变更,如下:

[root@iZ2ze278r1bks3c1m6jdznZ ~]# cat /etc/docker/daemon.json
{
 "bip":"192.168.2.1/24"
}

以上就是修改docker默认网关的详细内容,更多请关注其它相关文章!


推荐阅读
  • 本文档详细介绍了在 Kubernetes 集群中部署 ETCD 数据库的过程,包括实验环境的准备、ETCD 证书的生成及配置、以及集群的启动与健康检查等关键步骤。 ... [详细]
  • Docker入门与实践指南
    本文介绍了Docker的基础知识,包括其作为开源应用容器引擎的特点,以及如何利用Docker将应用程序及其依赖项打包成轻量级的容器镜像。同时,还详细讲解了Docker的核心概念、安装过程及基本命令操作。 ... [详细]
  • GNU GRUB(简称GRUB)是一个来自GNU项目的支持多启动的引导加载程序。它允许用户在同一台计算机上安装多个操作系统,并在启动时选择希望启动的系统。 ... [详细]
  • 作为一名Docker初学者,我已经成功创建了一个基于Alpine Linux 3.4的Docker镜像,该镜像安装了MySQL、Apache和PHP及其相关扩展。本文将探讨如何确保MySQL数据在Docker容器重启后仍能被保留。 ... [详细]
  • cJinja:C++编写的轻量级HTML模板引擎
    本文介绍了cJinja,这是一个用C++编写的轻量级HTML模板解析库。它利用ejson来处理模板中的数据替换(即上下文),其语法与Django Jinja非常相似,功能强大且易于学习。 ... [详细]
  • 深入理解动态链接库及其应用
    本文将探讨动态链接库的基本概念,包括Windows下的动态链接库(DLL)和Linux下的共享库(Shared Library),并详细介绍如何在Linux环境中创建和使用这些库。 ... [详细]
  • RedHat 系统下配置国内 YUM 源以替代官方收费源的方法
    本文详细介绍如何在 RedHat Linux 中安装并配置 YUM 包管理器,并通过使用国内镜像源来解决因未购买官方服务而导致的更新源限制问题。 ... [详细]
  • NFS(Network File System)即网络文件系统,是一种分布式文件系统协议,主要用于Unix和类Unix系统之间的文件共享。本文详细介绍NFS的配置文件/etc/exports和相关服务配置,帮助读者理解如何在Linux环境中配置NFS客户端。 ... [详细]
  • 本文提供了在 Kali Linux 2020.01 x64 版本上安装 Docker 的详细步骤,包括环境准备、使用清华大学镜像源、配置 APT 仓库以及安装过程中的常见问题处理。 ... [详细]
  • 本文详细介绍了 Kubernetes 集群管理工具 kubectl 的基本使用方法,涵盖了一系列常用的命令及其应用场景,旨在帮助初学者快速掌握 kubectl 的基本操作。 ... [详细]
  • 解决CentOS 7.5中无法通过man命令查询C语言库函数的问题
    本文描述了在CentOS 7.5操作系统上,使用man命令查询C语言库函数时遇到的问题,并提供了详细的解决方案。 ... [详细]
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
  • CentOS 转向引发争议,联合创始人推出 Rocky Linux
    CentOS 转向 CentOS Stream 引发用户不满,其联合创始人 Gregory Kurtzer 推出新的社区项目 Rocky Linux,旨在延续 CentOS 的精神。 ... [详细]
  • 在DELL Inspiron 14R上部署CentOS X64 6.4的详细步骤
    本文详细记录了在DELL Inspiron 14R笔记本电脑上安装CentOS X64 6.4操作系统的过程,包括遇到的问题及解决方法。 ... [详细]
  • Docker基础指南与核心命令解析
    本文全面介绍了Docker的基本概念、安装方法、核心命令及其用法,并深入探讨了Docker容器的数据卷管理及应用部署策略,适合初学者快速掌握Docker技术。 ... [详细]
author-avatar
心醉逸轩_620
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有