docker网络管理详解 一
一· 生产故障:docker 同一宿主机不能通信
1. 检查容器网络配置
1.1 查看容器的网络信息
使用 `docker inspect` 命令查看容器的网络配置,确保它们连接到了正确的网络。
docker inspect -f '{{json .NetworkSettings.Networks }}' container1
docker inspect -f '{{json .NetworkSettings.Networks }}' container2
确保两个容器连接到了同一个网络,例如 `bridge` 网络或自定义网络。
2. 检查容器的IP地址
获取容器的IP地址,确保它们在同一个子网内。
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container1
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container2
3. 检查网络连通性
3.1 使用 `ping` 测试
从一个容器向另一个容器发送 `ping` 请求,检查网络连通性。
docker exec -it container1 ping -c 4 <container2_ip>
如果 `ping` 不通,说明网络配置可能有问题。
4. 检查防火墙规则
4.1 检查 `iptables` 规则
查看 `iptables` 规则,确保没有阻止容器之间的通信。
sudo iptables -L -n -v
特别是检查 `DOCKER` 和 `DOCKER-USER` 链,确保没有 `DROP` 或 `REJECT` 规则。
4.2 检查 `firewalld` 规则
如果你使用 `firewalld`,检查其规则。
sudo firewall-cmd --list-all
5. 检查 Docker 网络设置
5.1 检查 Docker 网络
查看 Docker 网络的详细信息,确保网络配置正确。
docker network ls
docker network inspect <network_name>
5.2 检查 `--icc` 设置
确保 Docker 守护进程没有禁用容器间通信(ICC)。检查 `/etc/docker/daemon.json` 文件,确保 `icc` 设置为 `true`。
json{"icc": true}
6. 检查容器端口映射
确保容器的端口映射正确,特别是如果你使用了 `--publish` 或 `-p` 选项。
docker ps -a
7. 检查容器内的网络配置
进入容器内部,检查其网络配置。
docker exec -it container1 /bin/sh
ip addr show
ip route show
8. 检查 DNS 解析
如果容器使用域名而不是IP地址进行通信,确保 DNS 解析正常。
docker exec -it container1 nslookup <container2_hostname>
9. 检查容器日志
查看容器的日志,寻找可能的网络相关错误。
docker logs container1
docker logs container2
10. 重启 Docker 服务
如果上述步骤都没有解决问题,尝试重启 Docker 服务。
sudo systemctl restart docker
11. 重新创建网络和容器
如果问题依然存在,可以尝试删除现有的网络和容器,然后重新创建。
docker network rm <network_name>
docker network create <network_name>
docker rm -f container1
docker rm -f container2
docker run -d --name container1 --network <network_name> my_image
docker run -d --name container2 --network <network_name> my_image
二. 容器名称互联
假设我们在西安的环境中部署了一个简单的微服务应用,包含以下几个部分:
1. Web服务器:运行Nginx,负责处理HTTP请求。
2. 应用服务器:运行Node.js应用,处理业务逻辑。
3. 数据库:使用MySQL,存储应用数据。
步骤
# 1. 创建自定义网络
首先,创建一个自定义的桥接网络,以便容器之间可以相互通信。
docker network create my_network
# 2. 创建数据卷
创建一个数据卷,用于持久化MySQL的数据。
docker volume create mysql_data
# 3. 启动MySQL容器
启动MySQL容器,并将其连接到自定义网络。为容器指定一个别名,以便其他容器可以通过别名访问它。同时,挂载数据卷以实现数据持久化。
docker run -d --name mysql_db --network my_network --alias db \
-v mysql_data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
-e MYSQL_DATABASE=mydb \
-e MYSQL_USER=myuser \
-e MYSQL_PASSWORD=mypassword \
mysql:5.7
# 4. 启动应用服务器容器
启动Node.js应用服务器容器,并将其连接到自定义网络。为容器指定一个别名,以便其他容器可以通过别名访问它。
docker run -d --name node_app --network my_network --alias app \
-e DB_HOST=db \
-e DB_USER=myuser \
-e DB_PASSWORD=mypassword \
-e DB_NAME=mydb \
my_node_app_image
# 5. 启动Web服务器容器
启动Nginx容器,并将其连接到自定义网络。为容器指定一个别名,以便其他容器可以通过别名访问它。
docker run -d --name nginx_server --network my_network --alias web \
-p 80:80 \
-v /path/to/nginx/conf.d:/etc/nginx/conf.d \
-v /path/to/static/files:/usr/share/nginx/html \
nginx
配置Nginx
在Nginx配置文件中,配置反向代理,将请求转发到Node.js应用服务器。
# Nginx配置文件 (`/path/to/nginx/conf.d/default.conf`)
nginx
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://app:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /static/ {
alias /usr/share/nginx/html/;
}
}
验证
1. 验证MySQL容器:
- 确保MySQL容器正常运行并监听端口3306。
docker logs mysql_db
2. 验证Node.js应用服务器容器:
- 确保Node.js应用服务器容器正常运行并连接到MySQL数据库。
docker logs node_app
3. 验证Web服务器容器:
- 访问Web服务器的主页,确保Nginx能够正确代理请求到Node.js应用服务器。
curl http://localhost
持久化存储验证
1. 停止并删除MySQL容器
docker stop mysql_db
docker rm mysql_db
2. 重新启动MySQL容器
docker run -d --name mysql_db --network my_network --alias db \
-v mysql_data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
-e MYSQL_DATABASE=mydb \
-e MYSQL_USER=myuser \
-e MYSQL_PASSWORD=mypassword \
mysql:5.7
3. 验证数据
连接到MySQL容器,确保数据仍然存在。
docker exec -it mysql_db mysql -u myuser -pmypassword mydb
备份和恢复
# 备份数据
1. 备份数据卷
docker run --rm --volumes-from mysql_db -v $(pwd):/backup ubuntu tar czvf /backup/mysql_backup.tar.gz /var/lib/mysql
# 恢复数据
1. 恢复数据卷
docker run --rm --volumes-from mysql_db -v $(pwd):/backup ubuntu -c "cd / && tar xzvf /backup/mysql_backup.tar.gz"
补充还有 通过link方式,一般生产都用别名方式,就略了
--link sever1:sever2
这也是别名实现的另一种方式
相关文章:
docker网络管理详解 一
一 生产故障:docker 同一宿主机不能通信 1. 检查容器网络配置 1.1 查看容器的网络信息 使用 docker inspect 命令查看容器的网络配置,确保它们连接到了正确的网络。 docker inspect -f {{json .NetworkSettings.Networks }} container1 docker inspe…...

前端使用Canvas实现网页电子签名(撤销、下载)
前言:一般在一些后台的流程资料以及审核的场景中会需要电子签名,介绍一种用canvas实现的电子签名,此案例用的是原生js 效果展示: 一、html和css: <div class"divCla2"><canvas id"myCanvas&q…...

Lepus安装与配置管理(Lepus Installation and Configuration Management)
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…...
Tomcat中存放图片文件丢失问题
1、tomcat中存放的图片丢失原因: tomcat 在处理 WAR 包时,会在部署时解压 WAR 包并创建文件夹。如果在 tomcat 运行时删除了 WAR 包,tomcat会检测到这种变化,然后可能会自动清理已解压的文件夹。这是tomcat默认的行为,…...
Webpack一键打包多个环境
1. 安装打包插件 安装如下插件,以便可以在打包命令中设置环境变量区分不同的环境。 npm install --save-dev cross-env 2. 配置打包命令 在package.json中配置正式环境和测试环境打包命令,同时添加一个命令同打包两个环境。 // package.json "…...
Neo4j 构建文本类型的知识图谱
Neo4j 是一个强大的图数据库,用于构建和查询各种类型的图数据结构。构建知识图谱是一项常见任务,尤其在处理自然语言处理 (NLP) 和文本信息时。基于 Neo4j,可以将文本数据转换为知识图谱,使得复杂的文本关系以图结构存储ÿ…...

【SSM详细教程】-03-Spring参数注入
精品专题: 01.《C语言从不挂科到高绩点》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482 02. 《SpringBoot详细教程》课…...
深度学习 %matplotlib inline
%matplotlib inline 是在 Jupyter Notebook 中使用的一个魔法命令,主要用于配置 Matplotlib 图形的显示方式。具体来说,这个命令的作用是将 Matplotlib 生成的图形直接嵌入到 notebook 中,而不是在弹出的窗口中显示。 使用方法 在 Jupyter …...

RT-Thread线程的定义和属性
目录 概述 1 RT-Thread线程定义 1.1 优先级设定方法 1.2 内存管理 1.2.1 RT-Thread的线程类别 1.2.2 RT-Thread的线程调度 2 线程重要属性 2.1 线程栈 2.2 线程状态 2.3 线程优先级 2.4 时间片 概述 本文主要介绍RT-Thread线程的定义和属性,其包括线程的…...

【大模型问答测试】大模型问答测试脚本实现(第二版)——接入pytest与代码解耦
背景 接上一篇,【大模型问答测试】大模型问答测试脚本实现(第一版)。 在实现自动化的时候,原先把很多方法与request请求写在一块了,趁着目前实现接口数量较少,决定对代码进行解耦,并且清晰目录…...

Windows模拟电脑假死之键盘鼠标无响应
Windows模拟电脑假死之键盘鼠标无响应 1. 场景需求 模拟Windows电脑假死,失去键盘鼠标响应。 2. 解决方案 采用Windows系统提供的钩子(Hook) API 拦截系统鼠标键盘消息。 3. 示例程序 【1】. 创建MFC对话框项目 新建一个MFC应用程序项目,项目名称…...
一文详解线程池
什么是线程池? 线程池:就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源。 为什么用线程池? 线程池的优势:线程池做的工作…...

网际报文协议ICMP及ICMP重定向实例详解2
之前在一个项目中遇到了与ICMP重定向相关的问题,因为缺乏对ICMP相关内容的了解,排查了很长一段时间才查出来。本文给大家简要地介绍一下ICMP及ICMP重定向相关的内容。 1、ICMP的概念 ICMP(Internet Control Message Protocol)网际…...
CSS 总结
CSS 总结 引言 CSS(层叠样式表)是网页设计中不可或缺的一部分,它用于控制网页的布局和样式。本文将对CSS的基本概念、关键特性、常用属性以及最佳实践进行总结,旨在帮助读者深入理解并有效运用CSS。 CSS基本概念 1. 什么是CSS? CSS是一种样式表语言,用于描述HTML或X…...

C语言_指针_进阶
引言:在前面的c语言_指针初阶上,我们了解了简单的指针类型以及使用,下面我们将进入更深层次的指针学习,对指针的理解会有一个极大的提升。从此以后,指针将不再是难点,而是学习底层语言的一把利器。 本章重点…...
chat_gpt回答:python使用writearray写tiff速度太慢,有什么快速的方法吗
如果你在使用 Python 的 tifffile 库(或类似库)写入 TIFF 文件时速度太慢,以下是几个加速写入的优化方法和替代方案: 1. 优化文件压缩设置 TIFF 支持压缩格式,但压缩过程可能非常耗时。如果你不需要压缩,…...

【时时三省】(C语言基础)函数介绍strcat
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 strcat 字符串追加 示例: 比如我要把world加到hello后面去 就可以用这个 还有一种方法是这样 这两个代码的意思是一样的 只是写法不一样 写的时候要注意这些 •源字符串必须…...

ESP32C3 开发板在Linux环境下,进行JTAG 调试演示-启明云端乐鑫代理商
JTAG 调试教程 本教程主要演示 esp32c3 开发板在 linux 环境下,通过 vscode 的 esp-idf 插件使用 jtag 调试工具。 esp32c3 不但内置了USB-JTAG,还内置了USB-SERIAL,仅需要一根USB线即可实现下载和调试仿真。 下面演示调试仿真的过程。 创…...

《计算机视觉》—— 基于PyCharm中的dlib库实现人脸关键点定位
文章目录 1. 安装必要的库2. 下载dlib的人脸检测器和关键点预测器模型3. 编写代码 人脸关键点定位是指通过计算机视觉技术,识别和定位人脸图像中的关键点,如眼睛、鼻子、嘴巴等特定位置。这些关键点的准确定位对于人脸识别、表情分析、姿态估计等应用具有…...

c++习题34-说谎
目录 一,题目 二,思路 三,代码 一,题目 描述 ljc以自己的人格担保他最后一个回答一定是正确的,但并不保证其它的回答是对的。 每个数为ljc对上一个的回答,若为0表示说上句话是错的,若为…...

Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...

R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...