Docker使用(四)Docker常见问题分析和解决收集整理

Docker使用(四)Docker常见问题分析和解决收集整理

五、常见问题

1、 启动异常

【描述】:
在这里插入图片描述

【分析】:[root@localhost ~]# systemctl status docker
在这里插入图片描述

【解决】:

(1)卸载后重新安装,不能解决这个问题。

(2)

vim /lib/systemd/system/docker.service

CentOS 的路径为: /usr/lib/systemd/system/docker.service

修改文件内容:

# ExecStart=/usr/bin/dockerd -H fd://

ExecStart=/usr/bin/dockerd

在这里插入图片描述

备注:不能解决

(3)

进入 /etc/docker,没有daemon.json文件就自己新建一个

{

“registry-mirrors”: [“https://registry.docker-cn.com”]

}

备注:不能解决

(4)防火墙未关闭

解决方法:关闭防火墙即可。

systemctl stop firewalld

[root@localhost system]# sudo systemctl restart docker

备注:解决。

解决过程:

【1】 执行指令

​ [root@localhost system]# journalctl -xe

在这里插入图片描述

【2】查询 ERROR: COMMAND_FAILED: ‘/sbin/iptables -w2 -t filter -C DOCKER-ISOLATION-STAGE-2 -j RETURN’ failed: iptables: Bad

分析:

https://www.cnblogs.com/lijinze-tsinghua/p/8809838.html

由于防火墙未关闭导致。

============================================================================

2、 启动异常 2

【描述】:docker启动异常localhost.localdomain systemd[1]: start request repeated too quickly for docker.service

【解决】:

https://blog.csdn.net/qq_35648576/article/details/105953090

重启docker服务即可解决

# systemctl restart docker

============================================================================

3、docker启动不起来

【描述】:防火墙(firewalld)打开时候, docker启动不起来

在这里插入图片描述

【解决】:

reboot后,firewall自动启动(因为执行了这个 systemctl enable firewalld.service 开机启动),导致(systemctl start docker)执行失败,报上面错。

在这里插入图片描述

如何解决?:

分析:

(1)https://www.widuu.com/docker/installation/centos.html#installing-docker-centos-7

​ firewalld 和 iptables 都不是防火墙,它们只是防火墙的管理程序,真正的防火墙是内核的netfilter。CentOs 6 中使用iptables来管理防火墙,到了CentOs 7 默认使用firewalld来管理防火墙,但需要注意的是 firewalld 的底层还是调用 iptables 的,firewalld在iptables的基础上加了许多很好用的功能。

​ firewalld 是系统服务,有守护进程。iptables 只是一个工具,不是服务。

CentOS-7 中介绍了 firewalld,firewall的底层是使用iptables进行数据过滤,建立在iptables之上,这可能会与 Docker 产生冲突。

​ 当 firewalld 启动或者重启的时候,将会从 iptables 中移除 DOCKER 的规则,从而影响了 Docker 的正常工作。

​ 当你使用的是 Systemd 的时候, firewalld 会在 Docker 之前启动,但是如果你在 Docker 启动之后再启动 或者重启 firewalld ,你就需要重启 Docker 进程了。

(2) https://www.cnblogs.com/lemon-le/p/12976999.html

1、netfilter与iptables的关系

Netfilter是在Linux内核中的一个防火墙框架,用于管理网络数据包,不仅具有网络地址转换(NAT)的功能,也具有数据包内容修改,以及数据包过滤等防火墙功能。利用在用户空间的应用软件iptables等来控制Netfilter(iptables只是应用软件,工具)。

在这里插入图片描述

2、iptables与firewalld的关系

firewalld和iptables一样都是应用软件,是工具,但是他们的底层还是先通过iptables。

3、docker与firewalld、iptables的关系

1)docker安装完成后,会自动接管iptables或者firewalld,在docker run的时候,会自动往iptables里加入规则;所以当iptables重启后会丢失,只有再重启docker就好了的原因。

2)当使用Systemd 的时候, firewalld 会在 Docker 之前启动,但是如果你在 Docker 启动之后再启动 或者重启 firewalld ,就需要重启 Docker 进程了。

iptables详解(1):iptables概念

iptables是按照规则来办事的,规则(rules),其实就是网络管理员预定义的条件,规则一般的定义为”如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。

============================================================================

4、Networking will not work

【描述】:docker run hello-world 提示

WARNING: IPv4 forwarding is disabled. Networking will not work.

在这里插入图片描述

【解决】:
配置转发:

vim /etc/sysctl.conf#配置转发
net.ipv4.ip_forward=1#重启服务,让配置生效
systemctl restart network#查看是否成功,如果返回为“net.ipv4.ip_forward = 1”则表示成功sysctl net.ipv4.ip_forward

=======================================================

5、外部无法访问对应宿主机端口

【描述】:

建docker容器的时候,做了端口映射到宿主机, 防火墙已关闭, 但是外部始终无法访问宿主机端口?

这种情况基本就是因为宿主机没有开启ip转发功能,从而导致外部网络访问宿主机对应端口是没能转发到 Docker Container 所对应的端口上。

【解决】:

Linux 发行版默认情况下是不开启 ip 转发功能的。这是一个好的做法,因为大多数人是用不到 ip 转发的,但是如果架设一个 Linux 路由或者VPN服务我们就需要开启该服务了。

=======================================================

在 Linux 中开启 ip 转发的内核参数为:net.ipv4.ip_forward,查看是否开启 ip转发:

检查宿主机的ip_forward:

# cat /proc/sys/net/ipv4/ip_forward // 0:未开启,1:已开启

所以具体的解决方案就是修改ip_forward的值为1

=======================================================

临时解决:

打开ip转发功能, 下面两种方法都是临时打开ip转发功能!

# echo 1 > /proc/sys/net/ipv4/ip_forward

# sysctl -w net.ipv4.ip_forward=1

=====================================================================

永久生效的ip转发:修改/etc/sysctl.conf文件

# vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

# sysctl -p /etc/sysctl.conf // 立即生效

Linux 系统中也可以通过重启网卡来立即生效 (修改sysctl.conf文件后的生效)

# service network restart // CentOS 6

# systemctl restart network // CentOS 7

# systemctl restart docker.service

5.2 [CentOS7 下部署 Iptables 环境纪录(关闭默认的firewalle)

1、关闭firewall:

[root@localhost ~]# systemctl stop firewalld.service //停止firewall

[root@localhost ~]# systemctl disable firewalld.service //禁止firewall开机启动

2、安装iptables防火墙

[root@localhost ~]# yum install iptables-services //安装

[root@localhost ~]# vim /etc/sysconfig/iptables //编辑防火墙配置文件

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibitedCOMMIT

[root@localhost ~]# systemctl restart iptables.service //最后重启防火墙使配置生效

[root@localhost ~]# systemctl enable iptables.service //设置防火墙开机启动 [root@localhost ~]# iptables -L //查看防火墙规则,默认的是-t filter,如果是nat表查看,即iptables -t nat -L

3、关闭SELINUX

[root@localhost ~]# vim /etc/selinux/config

#SELINUX=enforcing // 注释掉

#SELINUXTYPE=targeted // 注释掉

SELINUX=disabled // 增加

[root@localhost ~]# setenforce 0 //使配置立即生效

=======================================================

6、 iptables: No chain/target/match by that name

【描述】:docker启动container的时候出现iptables: No chain/target/match by that namece/p/5799}

在这里插入图片描述

【解决】:

[root@localhost ~]# systemctl restart docker

分析:

​ 如果在启动docker service的时候网关是关闭的,那么docker管理网络的时候就不会操作网管的配置(chain docker),然后网关重新启动了,导致docker network无法对新container进行网络配置,也就是没有网管的操作权限,做重启处理。

​ 使用的centos7服务器,在部署docker的过程中,因端口问题有启停firewalld服务,在centos7里使用firewalld代替了iptables。在启动firewalld之后,iptables还会被使用,属于引用的关系。所以在docker run的时候,iptables list里没有docker chain,重启docker engine服务后会被加入到iptables list里面。(有必要深入研究一下docker network)

=======================================================

7、Docker 容器访问网关不通

问题描述:

1、安装好docker后,docker0地址:172.17.0.1
2、创建两个容器a,b后,ip分别为:172.17.0.2,172.17.0.3
3、宿主机无法ping通2个容器的ip地址,进入容器后也无法ping通docker0地址, 但容器间能互相ping通(在a内能ping通b,b内能ping通a),且无法ping通外网地址(但默认docker容器内是可以ping通外网的)

分析:

主要参考该贴,各种原因都分析了,甚至classiclink问题也考虑了,最后通过阿里云工程师帮忙日志分析,才发现是docker 加载内核的bridge.ko 驱动异常,导致docker0 网卡无法转发数据包,也就是系统内核的网桥模块bridge.ko 加载失败导致的,一般情况下这种场景的确很少见。

解决措施:

升级centos内核,或直接升级系统解决了。

解决过程:

  1. 查询内核版本

查询120的服务器172.41.0.120 内核版本

[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

内核版本是3.10太低了,导致Docker0不转发数据包

  1. 升级内核版本

步骤一:登录服务器,查看当前内核版本为3.10

cat /etc/redhat-release

步骤二:

yum --disablerepo="*" --enablerepo="elrepo-kernel" list available查看可安装的内核版本下载内核源rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

步骤三:安装最新内核版本

yum --enablerepo=elrepo-kernel install -y kernel-lt

步骤四:查看当前可用内核

cat /boot/grub2/grub.cfg |grep menuentry

步骤五:设置操作系统从新内核启动

grub2-set-default "CentOS Linux (4.4.221-1.el7.elrepo.x86_64) 7 (Core)"查看内核启动项是否修改grub2-editenv list

步骤六:最后重启生效

reboot

3、再次查询验证

自定义了mynet01

  • subnet = 172.15.0.0/24
  • gateway = 172.15.0.1
[root@localhost ~]# docker network create --subnet=172.15.0.0/24 --gateway=172.15.0.1 mynet01[root@localhost ~]# docker run -d --name tomcat_mynet01_01 -p 8992:8080 --net mynet01 tomcat[root@localhost ~]# docker exec -it tomcat_mynet01_01  ping 172.15.0.1

在自定义网络中,容器内可以ping的通网关的,在默认docker0网络中也是可以ping的通,这里不截图了。

总结:

  • linux内核版本这个问题比较隐蔽,不好找,还是找了大牛的解决方案分析测试的。

  • Docker网络是很重要的部分,需要深入分析。

=======================================================

8、容器内没有yum命令_无法使用vi命令

【描述】:docker容器内没有yum命令_Docker容器里无法使用vi命令

【解决办法】:

  1. apt-get update
  2. apt-get install vim

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

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

相关文章

Android cmdline tools安装

打开AS 进入SDK Tools 看到了吗?那个打着勾的就是

如何将图片无损放大?

如何将图片无损放大? 在处理图片时,我们经常会遇到需要放大图像而又不损失图像质量的情况。这种操作被称为“图片无损放大”,它可以帮助我们保持图像的清晰度和细节,同时满足对更大尺寸图像的需求。传统的图像放大方法往往会导致…

重要表格比较多 不想被别人查阅 怎样批量加密?excel批量加密

批量给Excel工作表加密是一个既实用又具挑战性的任务。对于需要在多个工作表中保护敏感信息的用户来说,掌握这一技能尤为重要。下面,我们将详细介绍如何批量给Excel工作表加密 首先,我们要选择合适的加密方法,在这里小编给大家推荐…

ASP.NET-WebFoms常见前后端交互方式

在 ASP.NET Web Forms 中,实现前后端交互是开发 Web 应用程序的重要部分。通过合适的数据传递方式,前端页面能够与后端进行有效的通信,并实现数据的传递、处理和展示。本文介绍了ASP.NET Web Forms开发中常见的前后端交互方式,包括…

Reactor,Proactor,Actor网络模型

Reactor,Proactor,Actor_reactor actor-CSDN博客 Actor模型是一种并发编程模型,它定义了计算单元的行为,这些计算单元被称为Actors。Actors通过消息传递进行通信,它们之间相互隔离,不共享内存。Actors…

Spring MVC(一)— DispatcherServlet

DispatcherServlet 是Spring MVC框架的HTTP 请求处理器的中央调度器。它具有以下的功能: 1)基于IoC容器JavaBean配置机制。 2)使用HandlerMappingl来实现请求到处理器的路由映射。 3)使用HandlerAdapter 来处理不同的处理器。 …

Go 构建高效的二叉搜索树联系簿

引言 树是一种重要的数据结构,而二叉搜索树(BST)则是树的一种常见形式。在本文中,我们将学习如何构建一个高效的二叉搜索树联系簿,以便快速插入、搜索和删除联系人信息。 介绍二叉搜索树 二叉搜索树是一种有序的二叉…

探索SOCKS5代理、代理IP、HTTP与网络安全

在这个数字化时代,网络安全已成为我们日常生活中不可或缺的一部分。作为一名软件工程师,深入理解网络通信的核心技术,如SOCKS5代理、代理IP、HTTP协议,以及它们在网络安全中的应用,对于设计和实施安全的网络应用至关重…

uni-app 安卓手机判断是否开启相机相册权限

// 安卓相机权限 androidCameraPermiss(index){ plus.android.requestPermissions([android.permission.CAMERA],(e) > { if (e.deniedAlways.length > 0) { this.androidAuthCamera false …

【自动驾驶可视化工具】

自动驾驶可视化工具 自动驾驶可视化工具1.百度Apollo的Dreamview:2.Cruise的Worldview:3.Uber的AVS:4.Fglovex Studio: 自动驾驶可视化工具 介绍一下当前主流的自动驾驶可视化工具。 1.百度Apollo的Dreamview: Dreamview是百度Apollo平台开发的一种可视化工具,用…

使用Spark清洗统计业务数据并保存到数据库中

1、打开前面创建的项目“BigData-Etl-KongGuan”,创建一些数据库访问的工具类和辅助类。 1)打开SpringBoot项目:BigData-Etl-KongGuan 2)创建数据库访问的工具类和辅助类: com.qrsoft.etl.dao.IBaseDao数据库访问的通…

基于正点原子潘多拉STM32L496开发板的简易示波器

一、前言 由于需要对ADC采样性能的评估,重点在于对原波形的拟合性能。 考虑到数据的直观性,本来计划采集后使用串口导出,并用图形做数据拟合,但是这样做的效率低下,不符合实时观察的需要,于是将开发板的屏幕…

【DataWhale学习笔记】使用AgentScope调用同义倩文大模型

AgentScope AgentScope介绍 AgentScope是一款全新的Multi-Agent框架,专为应用开发者打造,旨在提供高易用、高可靠的编程体验! 高易用:AgentScope支持纯Python编程,提供多种语法工具实现灵活的应用流程编排&#xff…

部署prometheus+Grafana可视化仪表盘监控服务

一、部署prometheus及监控仪表盘 简介 Prometheus是开源监控报警系统和时序列数据库(TSDB)。 Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控,输出被监控组件信息的HTTP接口被叫做expo…

Node.js(1)

跨平台的node.js运行环境,使开发者可以搭建服务器端的js应用程序 它可以编写服务器端程序; 编写数据接口;提供网页资源浏览功能 前端工程化:开发集成的所有工具和技术 与浏览器环境的区别 node.js环境中没有DOM和BOM fs模块-读…

使用Jackson进行 JSON 序列化和反序列化

在Spring应用程序中&#xff0c;您可以通过Maven添加Jackson依赖&#xff0c;并创建一个工具类来封装对象的序列化和反序列化方法。以下是详细步骤&#xff1a; 1. 引入 Jackson 依赖 如果使用 Maven&#xff0c;您可以在 pom.xml 文件中添加以下依赖&#xff1a; <depend…

5 个适用于 Windows 10 和 11 的最佳 PDF 转 Word 转换器

PDF 文件是共享文档的首选格式&#xff0c;但是此类文件存在一些限制&#xff0c;导致难以修改或编辑。因此&#xff0c;您可能会发现自己正在寻找一种将 PDF 文件转换为 Word 或其他可编辑格式的方法。 有许多不同的 PDF 转换器&#xff0c;每种转换器提供的功能略有不同。本…

多人聊天室 (epoll - Linux网络编程)

文章目录 零、效果展示一、服务器代码二、客户端代码三、知识点1.bind() 四、改进方向五、跟练视频 零、效果展示 一个服务器作为中转站&#xff0c;多个客户端之间可以相互通信。至少需要启动两个客户端。 三个客户端互相通信 一、服务器代码 chatServer.cpp #include <…

突破编程_C++_设计模式(中介者模式)

1 中介者模式的基本概念 C中的中介者模式&#xff08;Mediator Pattern&#xff09;是一种行为型设计模式&#xff0c;主要用于降低多个对象和类之间的通信复杂性。这种模式通过引入一个中介类来封装和处理不同类之间的通信&#xff0c;从而实现松耦合&#xff0c;使代码更易于…

每天一个数据分析题(二百零九)

某销售服饰的电商店铺想要通过漏斗模型分析转化率数据&#xff0c;关于单一漏斗模型的局限性&#xff0c;下列说法不正确的是&#xff08;&#xff09; A.不能反映趋势&#xff0c;单一漏斗模型只能反映某一时期的情况,不能看出转化率是在上升还是下降。需要增加时间维度上的比…