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表示说上句话是错的,若为…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
