当前位置: 首页 > news >正文

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网络管理详解 一

一 生产故障&#xff1a;docker 同一宿主机不能通信 1. 检查容器网络配置 1.1 查看容器的网络信息 使用 docker inspect 命令查看容器的网络配置&#xff0c;确保它们连接到了正确的网络。 docker inspect -f {{json .NetworkSettings.Networks }} container1 docker inspe…...

前端使用Canvas实现网页电子签名(撤销、下载)

前言&#xff1a;一般在一些后台的流程资料以及审核的场景中会需要电子签名&#xff0c;介绍一种用canvas实现的电子签名&#xff0c;此案例用的是原生js 效果展示&#xff1a; 一、html和css&#xff1a; <div class"divCla2"><canvas id"myCanvas&q…...

Lepus安装与配置管理(Lepus Installation and Configuration Management)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…...

Tomcat中存放图片文件丢失问题

1、tomcat中存放的图片丢失原因&#xff1a; tomcat 在处理 WAR 包时&#xff0c;会在部署时解压 WAR 包并创建文件夹。如果在 tomcat 运行时删除了 WAR 包&#xff0c;tomcat会检测到这种变化&#xff0c;然后可能会自动清理已解压的文件夹。这是tomcat默认的行为&#xff0c;…...

Webpack一键打包多个环境

1. 安装打包插件 安装如下插件&#xff0c;以便可以在打包命令中设置环境变量区分不同的环境。 npm install --save-dev cross-env 2. 配置打包命令 在package.json中配置正式环境和测试环境打包命令&#xff0c;同时添加一个命令同打包两个环境。 // package.json "…...

Neo4j 构建文本类型的知识图谱

Neo4j 是一个强大的图数据库&#xff0c;用于构建和查询各种类型的图数据结构。构建知识图谱是一项常见任务&#xff0c;尤其在处理自然语言处理 (NLP) 和文本信息时。基于 Neo4j&#xff0c;可以将文本数据转换为知识图谱&#xff0c;使得复杂的文本关系以图结构存储&#xff…...

【SSM详细教程】-03-Spring参数注入

精品专题&#xff1a; 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 中使用的一个魔法命令&#xff0c;主要用于配置 Matplotlib 图形的显示方式。具体来说&#xff0c;这个命令的作用是将 Matplotlib 生成的图形直接嵌入到 notebook 中&#xff0c;而不是在弹出的窗口中显示。 使用方法 在 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线程的定义和属性&#xff0c;其包括线程的…...

【大模型问答测试】大模型问答测试脚本实现(第二版)——接入pytest与代码解耦

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

Windows模拟电脑假死之键盘鼠标无响应

Windows模拟电脑假死之键盘鼠标无响应 1. 场景需求 模拟Windows电脑假死&#xff0c;失去键盘鼠标响应。 2. 解决方案 采用Windows系统提供的钩子(Hook) API 拦截系统鼠标键盘消息。 3. 示例程序 【1】. 创建MFC对话框项目 新建一个MFC应用程序项目&#xff0c;项目名称…...

一文详解线程池

什么是线程池&#xff1f; 线程池&#xff1a;就是一个容纳多个线程的容器&#xff0c;其中的线程可以反复使用&#xff0c;省去了频繁创建线程对象的操作&#xff0c;无需反复创建线程而消耗过多资源。 为什么用线程池&#xff1f; 线程池的优势&#xff1a;线程池做的工作…...

网际报文协议ICMP及ICMP重定向实例详解2

之前在一个项目中遇到了与ICMP重定向相关的问题&#xff0c;因为缺乏对ICMP相关内容的了解&#xff0c;排查了很长一段时间才查出来。本文给大家简要地介绍一下ICMP及ICMP重定向相关的内容。 1、ICMP的概念 ICMP&#xff08;Internet Control Message Protocol&#xff09;网际…...

CSS 总结

CSS 总结 引言 CSS(层叠样式表)是网页设计中不可或缺的一部分,它用于控制网页的布局和样式。本文将对CSS的基本概念、关键特性、常用属性以及最佳实践进行总结,旨在帮助读者深入理解并有效运用CSS。 CSS基本概念 1. 什么是CSS? CSS是一种样式表语言,用于描述HTML或X…...

C语言_指针_进阶

引言&#xff1a;在前面的c语言_指针初阶上&#xff0c;我们了解了简单的指针类型以及使用&#xff0c;下面我们将进入更深层次的指针学习&#xff0c;对指针的理解会有一个极大的提升。从此以后&#xff0c;指针将不再是难点&#xff0c;而是学习底层语言的一把利器。 本章重点…...

chat_gpt回答:python使用writearray写tiff速度太慢,有什么快速的方法吗

如果你在使用 Python 的 tifffile 库&#xff08;或类似库&#xff09;写入 TIFF 文件时速度太慢&#xff0c;以下是几个加速写入的优化方法和替代方案&#xff1a; 1. 优化文件压缩设置 TIFF 支持压缩格式&#xff0c;但压缩过程可能非常耗时。如果你不需要压缩&#xff0c;…...

【时时三省】(C语言基础)函数介绍strcat

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 strcat 字符串追加 示例&#xff1a; 比如我要把world加到hello后面去 就可以用这个 还有一种方法是这样 这两个代码的意思是一样的 只是写法不一样 写的时候要注意这些 •源字符串必须…...

ESP32C3 开发板在Linux环境下,进行JTAG 调试演示-启明云端乐鑫代理商

JTAG 调试教程 本教程主要演示 esp32c3 开发板在 linux 环境下&#xff0c;通过 vscode 的 esp-idf 插件使用 jtag 调试工具。 esp32c3 不但内置了USB-JTAG&#xff0c;还内置了USB-SERIAL&#xff0c;仅需要一根USB线即可实现下载和调试仿真。 下面演示调试仿真的过程。 创…...

《计算机视觉》—— 基于PyCharm中的dlib库实现人脸关键点定位

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

c++习题34-说谎

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

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...