Docker容器如何连接网络+容器间网络互通+Docker网络模式+自定义网络+网络打通

article/2025/5/19 8:42:04

Docker网络

  • 问题:
  • Docker容器如何连接网络
  • Docker容器之间能否接通网络
  • Docker容器之间可以通过名称ping通吗
  • 能否自定义一个网络

那么,我们带着几个问题来学习docker的网络


Docker容器是如何连接网络的

我们在安装了Docker以后,在 宿主机上 ip addr就会发现,多一个docker0的网卡配置

在这里插入图片描述

我们启动一个tomcat容器,然后再去容器看一下 ip addr

docker run -d -P --name tomcat01 tomcat
docker exec -it tomcat01 ip addr  # 支持此写法

在这里插入图片描述

发现有个 6:eth0@if7的网络,我们再去宿主机上看一下网络


在这里插入图片描述

会发现,宿主机上多了一个 7:veth0925cfc@if6的网络

实际上这是采用了 evth-pair技术,6:eth0@if7和7:veth0925cfc@if6就是一对儿对应的虚拟网络设备接口,两个接口可以连接起来,把网络打通

evth-pair就是一对的虚拟设备接口,他们都是成对出现的,一段连着协议,一段彼此相连。正因为有这个特性,evth-pair充当一个桥梁,连接各种虛拟网络设备的
OpenStac,Docker容器之间的连接,OVS的连接,都是使用evth-pair 技术

那么我们能不能ping通容器呢,试一下 (tomcat01的地址 172.17.0.2)

在这里插入图片描述

完全可以,实际上,我们在宿主机ping容器,经过docker0上的虚拟网络设备接口,也就是7:veth0925cfc@if6和

6:eth0@if7就可以走通

Docker容器之间可以通吗

先再建一个tomcat02容器

docker run -d -P --name tomcat02 tomcat
docker exec -it tomcat02 ip addr

在这里插入图片描述

ip addr

在这里插入图片描述

发现又多了一对虚拟设备接口 8:eth@if9 和 9:vethe9ed702@if8

用 tomcat01 ping tomcat02(172.17.0.3)

docker exec -it tomcat01 ping 172.17.0.3

在这里插入图片描述

发现,容器之间也可以ping通

画一个网络模型

在这里插入图片描述

流程:从tomcat01–>evth-pair技术的虚拟设备接口–>docker0路由器–>evth-pair技术的虚拟设备接口–>连接到tomcat02

Docker容器之间可以通过名称ping通吗

docker exec -it tomcat01 ping tomcat02

在这里插入图片描述

直接使用容器名称是ping不通的,要是用 --link技术来实现(创建容器的时候指定)

在启动一个tomcat03 docker run -d -P --name tomcat03 --link tomcat02 tomcat

使用tomcat03ping tomcat02

docker exec -it tomcat03 ping tomcat02

在这里插入图片描述

结果ping通了

我们看一下docker的docker0网络配置(docker0的名称默认为bridge)

docker network ls
docker network inspect 网络id/名称

在这里插入图片描述

也就是说,创建的容器如不指定网络的话,那么默认的使用docker0(bridge)的网络模式


我们去看一下tomcat03的 /etc/hosts文件

在这里插入图片描述

**实质:**那么实质上就是,在tomcat03的hosts配置文件里,给tomcat02的ip设置了一个名字,访问tomcat02的时候实际上就是转发到172.17.0.3 也就是 tomcat02的ip地址

**局限性:**但是如果使用tomcat02去ping tomcat03呢,结果是不可行,现在已经不再使用 --link来连接容器了,局限性比较

能否自定义一个网络

当然可以,创建一个容器在不指定网络的情况下,默认是docker0(bridge)网络

docker network ls 查看所有网络

在这里插入图片描述

温馨提示:忘记命令时,docker network --help 查文档

网络模式:

bridge :桥接docker (默认,自己创建也使用bridge模式)
none:不配置网络
host :和宿主机共享网络
container :容器网络连通! ( 用的少!局限很大)

创建容器时指定网络

docker run -d -P tomcat01 --net bridge tomcat # --net 指定网络

自定义网络

忘记怎么敲,就docker network create --help

在这里插入图片描述

–driver bridge
–subnet 192.168. 0.0/16
–gateway 192.168.0.1

docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 net

在这里插入图片描述

docker network inspect net # 查看网络信息

在这里插入图片描述

尝试一下,使用我们自己的网络来启动容器

docker run -d -P --name tomcat-net-01 --net net tomcat
docker run -d -P --name tomcat-net-02 --net net tomcat

查看 net 网络的配置信息

docker network inspect net

在这里插入图片描述

使用我们自定义的网络创建的容器之间可以通过容器名字相互ping通

docker exec -it tomcat-net-01 ping tomcat-net-02

在这里插入图片描述

打通网络

我们先使用默认bridge创建一个tomcat01,那么tomcat01可以访问到 net 网络下的 tomcat-net-01吗

不可以,两个网络间的容器需要打通后才可以访问

是指,网络和容器之间打通(例如,net网络和 tomcat01容器)

在这里插入图片描述

docker network connect net tomcat01

打通后,试一下可不可以访问 tomcat-net-01

docker exec -it tomcat01 ping tomcat-net-01

在这里插入图片描述

访问成功了

我们看一下tomcat01的网络配置

在这里插入图片描述

惊讶,这个容器的网络配置居然有两个,而且分配了两个ip地址!!!

网络模型图(偷个图,哈哈O(∩_∩)O)

在这里插入图片描述

也就是说,docker0的网络中有tomcat01这个容器,而且自定义的net网络中也有tomcat01这个容器

一般使用docker network connect 打通网络


http://chatgpt.dhexx.cn/article/XppcqnmI.shtml

相关文章

docker网络模式

目录 一、Docker网络实现原理 二、Docker的网络模式 1、Host模式 2、Container模式 3、none模式 4、bridge模式 三、自定义网络 1、查看网络模式列表 2、查看容器信息(包含配置、环境、网关、挂载、cmd等等信息) 3、指定分配容器IP地址 4、自定义网络固定…

Docker的网络模式

目录 一、Docker网络 1、Docker网络工作原理 2、为容器创建端口映射 二、Docker的网络模式 1、Docker的网络模式 2、查看docker的网络列表 3、指定容器网络模式 三、Docker网络模式详解 1、host模式 2、container模式 3、none 模式 4、bridge 模式 5、自定义网络模…

Docker:(四)docker网络模式

目录 一:虚拟网关 二:docker常用的几种网络模式 2.1Host模式 2.2container模式 2.3bridge模式(默认) 2.4None模式(躺平) 扩展:overlay叠加网络模式 三:自定义网络 3.1查看网…

docker 网络五种模式

docker 网络五种模式 一:Host模式 host容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口范围,如果启动容器的时候使用host模式,那么这个容器将不会获得独立的网卡名称空间,那是和宿主…

Docker 的4种网络模式

我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: host模式,使用--nethost指定。container模式,使用--netcontainer:NAME_or_ID指定。none模式,使用--n…

Docker网络模式解析

目录 前言 一、常用基本命令 (一)查看网络 (二)创建网络 (三)查看网络源数据 (四)删除网络 二、网络模式 (一)总体介绍 (二&#xff09…

Docker容器之网络模式

目录 引言 一、Docker网络实现原理 二、Docker的网络模式 2.1、HOST模式 2.2、Container模式 2.3、None模式 2.4、bridge模式 三、自定义网络 3.1、查看网络模式列表 3.2、查看容器详细信息(包含配置、环境、网关、挂载、cmd等信息) 3.3、指定…

docker三种网络模式

1.docker默认的三种网络模式: bridge:桥接模式 host:主机模式 none:无网络模式 查看网络模式: docker network ls 2.桥接模式 简介:桥接模式是docker 的默认网络设置,当Docker服务启动时,…

docker的五种网络模式

目录 一、bridge网络(网桥的方式) 二、host网络 三、none网络 四、自定义网络 五、container模式 一、bridge网络(网桥的方式) 可以很清楚的看出容器和宿主机的关系,当我们docker程序运行时,我们会增加一…

Docker--网络模式

文章目录 一、Docker网络实现原理二、Docker的网络模式1.Host模式2.Container模式3.None模式4.Bridge模式 三、自定义网络1.查看网络模式列表2.查看容器信息(包含配置、环境、网关、挂载、cmd等等信息)3.指定分配容器IP地址 四、暴露端口五、为容器创建端…

Docker系列---网络模式 | Dockerfile | 参数讲解 | 详细说明

网络模式 | Dockerfile Docker 原生网络Docker 网络图解Docker 四种网络模式Host 模式Container模式None模式Bridge模式 Docker 网络自定义查看网络列表自定义网络固定IP暴露端口在宿主机环境执行容器内命令systemctl 命令 Docker 镜像分层Dockerfile 操作指令例:do…

七、Docker网络模式详解

目录 一、docker网络概述1、docker网络实现的原理2.容器的端口映射1).端口映射2).四种端口映射3).端口映射演示(1).随机端口映射(-P)(2).指定端口映射(-p 宿主机端口:容器端口)(3).指定网卡随机端口映射(-p ::&#xf…

使用navicat远程连接mysql时报2059错误解决方法

navicat连接mysql时报2059错误解决方法 报错原因解决方案1、管理员权限打开cmd2、修改加密规则及密码3、退出,重启mysql 报错原因 这个错误出现的原因是在mysql8之前的版本中加密规则为mysql_native_password,而在mysql8以后的加密规则为caching_sha2_pa…

navicat2012连接MySQL时提示2059错误

出现2059这个错误的原因是在mysql8之前的版本中加密规则为mysql_native_password,而在mysql8以后的加密规则为caching_sha2_password。通过网络查找发现我们可以将mysql用户登录的加密规则修改为mysql_native_password。 解决方法: 1.打开cmd&#xff0…

MySQL8:关于进入navicat连接MySQL出现2059界面

一.进入navicat连接MySQL出现2059页面: 原因:MySQL8之前版本中加密规则为mysql_native_password,MySQL8以后的加密规则为caching_sha2_password. 解决:将mysql用户登录加密规则修改为mysql_native_password即可. 二.解决方案: …

2059-Authentication plugin‘caching_sha2_password‘cannot be loaded

2059-Authentication plugin’caching_sha2_password’cannot be loaded 原因 由于目前已有的客户端连接软件还不支持Mysql8新增加的加密方式:caching_sha2_password 老的加密验证方式:mysql_native_password 解决方式 1、打开MySQL 8.0 Command Lin…

sqlyog连接mysql报错2058或者Navicat连接报错2059

下载了mysql8.0版本&#xff0c;结果连接的时候报了一些错误&#xff0c;这里进行总结 下载了mysql8.0版本&#xff0c;结果连接的时候报了一些错误&#xff0c;这里进行总结1、sqlyog连接mysql报错2058或者Navicat连接报错20592、sqlyog连接mysql报错 :连接失败 localhost<…

MySql 8.0.11 客户端连接失败:2059 - Authentication plugin 'caching_sha2_password' cannot be loaded: ....

近期,换了新笔记本,重新安装了MySql数据库和客户端工具Navicat Premium 12。我是从官网上下载的MySql数据库&#xff0c; 版本为8.0.11&#xff0c;链接&#xff1a;https://dev.mysql.com/downloads/mysql/ 当数据库和客户端安装成功后&#xff0c;我使用客户端连接接数据库时…

Django数据迁移:django.db.utils.OperationalError: (2059, <NULL>) ----2059错误解决方案

数据库迁移&#xff1a; 迁移是Django同步你对模型所做更改到你的数据库模式的方式 python manage.py makemigrations 将应用下的models.py文件生成一个中间文件&#xff0c;并保存在migrations文件夹中 python manage.py migrate 执行迁移程序实现迁移&#xff0c;将每个应用…

mysql8版本2059报错解决方法

mysql由原来一直使用的5.6切换到8版本&#xff0c;本地安装完成后&#xff0c;使用命令可以正常连接&#xff0c;但是使用navicat一直报2059的错误&#xff0c;如下图&#xff1a; 问题原因&#xff1a; 由于在MySql8之前的版本&#xff0c;默认的加密规则是mysql_native_pass…