关于Docker中容器之间互相访问问题

news2024/9/20 22:58:22

背景:

在学习 Docker 过程中,自己先开启了一个 mysql 容器,并且通过端口映射Navicat可以远程连接
后来在部署 nacos 过程中,对于其中参数 MYSQL_SERVICE_HOST 配置 mysql 的 IP 时
首先配置的是 localhost,结果 nacos容器 无法访问 mysql容器

在这里插入图片描述

localhost 无法访问原因:

因为 容器中的ip地址 和 宿主机的ip地址 是不同的,所以当 nacos 用 localhost 时,其实对应的是 nacos容器的ip地址,所以调用 localhost 时,并不能通过 宿主机的ip地址调用3306端口映射到容器中3306端口调用mysql容器,也不能通过 nacos容器ip地址调用3306端口调用mysql容器,因为docker中 nacos容器 和 mysql容器分配的地址是不同的

解决办法:

先查看 mysql容器 对应的 ip 地址:

docker inspect mysql | grep IPAddress

在查到 mysql容器 ip地址后,那么就可以配置到 nacos 中 MYSQL_SERVICE_HOST 里了,这时候就可以实现 nacos容器 与 mysql容器 之间的通信了

在这里插入图片描述

虽然容器之间实现了互相通信,问题得到了解决,但是始终觉得还没理解透彻,于是又查阅了大量资料,发现有更好的解决办法

该方法弊端:

当把容器访问ip写死后,这种方式绝对是很笨拙的,因为当重启Docker时,容器的 IP 地址会变化

浅解Docker容器网络模式

通过命令:

docker network ls

可以看到有三种网络模式:

  1. bridge模式,–net=bridge(默认)
    这是docker网络的默认设置,为容器创建独立的网络命令空间,容器具有独立的网卡等所有单独的网络栈,是最常用的使用方式。
    在进行docker run启动容器的时候,如果不加–net参数,就默认采用这种网络模式。
    安装完docker,系统会自动添加一个供docker使用的网桥docker0,我们创建一个新的容器时,容器通过DHCP获取一个与docker0同网段的IP地址,并默认连接到docker0网桥,以此实现容器与宿主机的网络互通。

  2. host模式,–net=host
    这个模式创建出来的容器,直接使用容器宿主机的网络命名空间,将不拥有自己独立的Network Namespace,即没有独立的网络环境,不需要设置端口映射即可连接到容器端口。它使用的是宿主机的ip和端口。

  3. none模式,–net=none
    为容器创建独立网络命名空间,但不为它做任何网络配置,容器中只有lo,用户可以在此基础上,对容器网络做任意定制。这种模式下,docker不为容器进行任何网络配置,需要我们自己为容器添加网卡,配置IP。
    因此,如果要使用pipework配置docker容器的ip地址,必须要在none模式下才可以。

所以之前创建的两个Docker容器是默认在 bridge模式下的,会自动分配不同 ip,可以通过 ip 地址实现容器之间的互相访问,但是不能通过 Docker容器名 来实现互相访问

最终解决方案:通过容器名来实现互相访问

要想实现通过容器名来互相访问,需要创建自定义网卡,网络驱动仍然使用 bridge

docker network create my-net

# 查看
docker network ls

在这里插入图片描述

将容器添加到自定义网络 my-net 当中,在容器运行时添加 --network my-net

# mysql容器运行
docker run --name mysql --network my-net -e MYSQL_ROOT_PASSWORD=xxx -p 3306:3306 -v $PWD/mysql/data:/var/lib/mysql -d mysql:5.7.25

# nacos容器运行
docker run --name nacos --network my-net -e MODE=standalone -p 8848:8848 -v $PWD/nacos/application.properties:/home/nacos/conf/application.properties -d nacos/nacos-server

可以通过查看 my-net 网卡详细信息看容器是否添加成功:

docker inspect my-net

在这里插入图片描述

这时候两个容器之间可以通过 容器名 来实现互相访问了

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/13239.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Opencv项目实战:16 虚拟拖拽系统

0、项目介绍 这次使用cvzone模块,制作一个虚拟拖拽系统,我们根据索引可以知道食指与中指的索引为8和12,当两指间合并时可以对虚拟方块进行拖拽,张开时解除拖拽,方块停在此处。虽然目前仍然存在一定的bug,即…

网站seo怎么优化?

一、网站搭建 1、选择合适的建站软件。 2、网站模板的选择。 3、title的选择至关重要。 4、长尾关键词的选择。 二、站内优化 1、首页title keywords description等布局好要优化的关键词,页面中间和底部也要布局关键词且用标签加粗! 2、网站 URL静态。…

Go runtime剖析系列(一):内存管理

Go 的内存管理总览 程序在运行过程中会不断的调用分配器分配堆内存,同时也会通过赋值器更新内存数据,如果我们将内存看做为一个个小的对象集合,那程序的运行其实就是更改这个对象图,其中分配器在这个对象图中创建节点&#xff0c…

Flutter 的缓存策略

Flutter 的缓存策略 原文 https://medium.com/romaingreaume/implementing-a-cache-strategy-in-your-flutter-app-5db3e316e7c9 前言 在移动应用程序中,缓存管理是一件非常重要的事情。 在本文中,我将告诉您如何在我的公司 Beapp 中设置策略缓存。 正文…

ES-分词器

简介 分词器是es中的一个组件,通俗意义上理解,就是将一段文本按照一定的逻辑,分析成多个词语,同时对这些词语进行常规化的一种工具;ES会将text格式的字段按照分词器进行分词,并编排成倒排索引,…

Vben Admin 的介绍以及使用

Vben Admin 的介绍以及使用初识 Vben Admin一、安装vue-vben-admin二、vben admin 目录介绍1.运行项目好用的插件启动项目打开终端三 项目分析1. 路由配置新增路由四 : vben admin 的使用初识 Vben Admin Vben Admin官方文档地址 好像官网挂了 !! 嘤嘤嘤嘤嘤 因为最近业务需要…

蓝牙无线自制串口模块连接穿越机配置工具

蓝牙无线自制串口模块连接穿越机配置工具1. 目的2. 验证环境3. BLE SPP验证4. BT SPP验证5. 参考资料穿越机配置工具 SpeedyBeeBetaFlightConfigurator 目前,市面上连接BetaFlight给飞控固件调参比较顺手的工具大体上是官网的BetaFlight Configurator(国内都叫BF地…

OFD转PDF ~java实现

OFD转PDF ~java实现 当你在查这个问题时,说明大家都已经接触到OFD这个新的版式文档了。OFD格式对标的PDF,目前关于PDF的转换都比较成熟,但是当OFD出现后,切发现能实现转换却似乎有所困难。尝试网上搜了一下这方面的资料&#xff…

别再当大冤种了,揭开3D建模报班6个常见套路

1⃣承诺有就业保障 任何机构给你承诺✊所谓的包就业都是耍流氓😡,请不要信❗️ 承诺就业保障的机构无非3种情况: 🔹赚取学员的信任感,吸引学员报名和交钱; 🔸提高机构的“专业度”和所谓的“…

JWT详解(文章内嵌jwt工具类)

JWT 基础概念详解,工具类和使用方法放在最后 什么是 JWT? JWT (JSON Web Token) 是目前最流行的跨域认证解决方案,是一种基于 Token 的认证授权机制。 从 JWT 的全称可以看出,JWT 本身也是 Token,一种规…

【现代密码学原理】——消息认证码(学习笔记)

📖 前言:消息认证码 MAC(Message Authentication Code)是经过特定算法后产生的一小段信息,检查某段消息的完整性,以及作身份验证。它可以用来检查在消息传递过程中,其内容是否被更改过&#xff…

Appium 移动端自动化测试(Mac)

目录 adb调试工具(Android Debug Bridge) adb常用命令 Appium使用 快速体验步骤 Appium常用方法 UIAutomatorViewer 获取元素 元素等待(在指定时间内一直等待 元素操作 Swipe 滑动和拖拽事件(Scroll、drag_and_drop&#…

pytorch深度学习实战19

第十九课 卷积层的填充和步幅 目录 理论部分 实践部分 理论部分 首先看一下卷积层的填充。 上图所示的情况会有个问题,如果卷积核不变的话(一直是5*5的卷积核),那么我的网络最多也就只能弄到第七层了,如果我想搭建更…

恒太照明在北交所上市:募资规模缩水三成,第三季度收入下滑

11月17日,江苏恒太照明股份有限公司(下称“恒太照明”,NQ:873339)在北京证券交易所(即“北交所”)上市。本次上市,恒太照明的发行价格为6.28元/股,发行数量为2220万股,募…

Linux|centos7下部署安装alertmanager并实现邮箱和微信告警

前言: 一个成熟的符合一般人预想的资源监控平台应该是能够多维度的展示各种各样的数据,比如,服务器的内存使用率,磁盘io状态,磁盘使用率,CPU的负载状态,某个服务的状态(比如&#x…

Pandas数据分析33——数据多条件筛选(点估计和区间估计评价指标)

本次是写论文代码区间估计评价指标有感..... 数据框有两列的时候,我们想筛选A列大于B列的样本出来时,只需要用布尔值索引就行: df[df[A]>df[B]] 可是多条件的筛选的时候怎么办,比如我需要A大于B列,还有A小于C列。…

软件测试“摆烂”已经成为常态化,我们应该怎样冲出重围?

网络日新月异发展的今天,每隔一段时间就会出现一些新的网络热词,最近“摆烂”成功突出重围,成为大家热议的中心。什么是“摆烂”?“摆烂”就是事情无法向好发展的时候直接选择妥协,不采取任何措施加以改变,…

兼容 信创鲲鹏/M1 arm64架构的kafka镜像

当前热度比较高的kafka镜像是wurstmeister/kafka,在dockerhub上有很多的使用次数。我起初很开心最新版支持arm64架构,然后拉到本地用Mac M1跑也很完美 但是!我放到信创鲲鹏的生产环境,导入镜像没问题,但一用docker-com…

IPWorks Zip Delphi 流式压缩组件

IPWorks Zip Delphi 流式压缩组件 IPWorks Zip允许开发人员使用Zip、Tar、Gzip、7-Zip、Bzip2、ZCompress或Jar压缩标准轻松地将压缩和解压缩集成到应用程序中。IPWorks Zip组件是从头开始构建的,将卓越的速度与出色的数据压缩比相结合。 IPWorks Zip功能 文件压…

Allegro如何给铜皮导弧操作详解

Allegro如何给铜皮导弧操作详解 当需要给如下铜皮导弧的,是一件比较麻烦的事情,但是可以用以下两个方法来实现 方法一 具体操作如下 shape-decompose shape Find选择shapes Options选择层面,比如top层,选择delete shape after decompose 框选铜皮 得到下图效果,然后…