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.rhkb.cn/news/276735.html

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

相关文章

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

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

oracle基础-子查询 备份

一、什么是子查询 子查询是在SQL语句内的另外一条select语句,也被称为内查询活着内select语句。在select、insert、update、delete命令中允许是一个表达式的地方都可以包含子查询,子查询也可以包含在另一个子查询中。 【例1.1】在Scott模式下&#xff0…

AJAX学习(四)

版权声明 本文章来源于B站上的某马课程,由本人整理,仅供学习交流使用。如涉及侵权问题,请立即与本人联系,本人将积极配合删除相关内容。感谢理解和支持,本人致力于维护原创作品的权益,共同营造一个尊重知识…

github 中的java前后端项目整合到本地运行

前言: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本文章未…

百度paddleocr GPU版部署

显卡:NVIDIA GeForce RTX 4070,Nvidia驱动程序版本:537.13 Nvidia驱动程序能支持的最高cuda版本:12.2.138 Python:python3.10.11。试过python3.12,安装paddleocr失败,找不到相关模块。 飞桨版本…

使用 Postman 批量发送请求的最佳实践

背景 最近写了几个接口: 获取 books 的接口获取 likes 的接口获取 collections 的接口 但是我还是不放心,因为这些接口到底稳不稳定呢?上线后有没有隐患呢?所以我想做一个批量发送接口模拟~ 但是想要做到批量发送接口&#xf…

每日五道java面试题之springMVC篇(四)

目录: 第一题. Spring MVC怎么样设定重定向和转发的?第二题.Spring MVC怎么和AJAX相互调用的?第三题. 如何解决POST请求中文乱码问题,GET的又如何处理呢?第四题. Spring MVC的异常处理?第五题. 如果在拦截请…

hcia复习总结5

路由表 路由器的转发原理&#xff1a;当一个数据包进入路由器&#xff0c;路由器将基于数据包中的 目标IP地址查看本地的 路由表 。如果路由表中存在记录&#xff0c;则将 无条件 按照 路由表记录执行&#xff1b;如果没有记录&#xff0c;则将该数据包直接丢弃。 <aa…

SpringMVC 02

这里先附上前一篇的地址,以上系列均为博主的学习路线,仅供参考 初识Spring MVC-CSDN博客 下面我们从SpringMVC传递数组开始讲起 1.传递数组 传递数组的方式和传递普通变量的方式其实是相同的,下面我们附上传递的图片 RequestMapping("/r7")public String r1(String[…

springboot+poi-tl根据模板导出word(含动态表格和图片),并将导出的文档压缩zip导出

springbootpoi-tl根据模板导出word&#xff08;含动态表格和图片&#xff09; 官网&#xff1a;http://deepoove.com/poi-tl/ 参考网站&#xff1a;https://blog.csdn.net/M625387195/article/details/124855854 pom导入的maven依赖 <dependency><groupId>com.dee…

002——编译鸿蒙(Liteos -a)

目录 一、鸿蒙是什么 二、Kconfig 2.1 概述 2.2 编译器 2.3 make使用 本文章引用了很多韦东山老师的教程内容&#xff0c;算是我学习过程中的笔记吧。如果侵权请联系我。 一、鸿蒙是什么 这里我补充一下对鸿蒙的描述 这张图片是鸿蒙发布时使用的&#xff0c;鸿蒙是一个很…

excel导入功能(适用于vue和react都可)

如图所示&#xff08;需求&#xff09;&#xff1a;点击导入excel后&#xff0c;数据自动新增到列表数据内 这里以vue3 andt 为例 template 标签内代码 &#xff1a; <a-uploadname"file":multiple"true":show-upload-list"false":customR…

iOS 腾讯Pag动画框架-实现PagView的截图功能

背景 产品想要一个首页的截图功能&#xff0c;一听这个功能&#xff0c;心想那还不简单&#xff0c;将父视图控件转换成图片保存就行了。按照这个思路实现&#xff0c;很快就打脸啦&#xff0c;首页的这些动画一个都没有截出来&#xff0c;就像消失啦似的。然后蠢蠢的将动画暂…

一周学会Django5 Python Web开发-Jinja3模版引擎-模板语法

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计37条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

【pycharm】如何将pacharm设置成中文

【pycharm】汉化教程——如何将pacharm设置成中文 1、打开pycharm 2、点击file 3、点击setting——Plugins——搜索Chinese——点击如下图图标进行下载 汉化后界面情况&#xff1a;

windows使用docker运行TP6使用swoole内置http服务

1&#xff0c;下载docker-Windows客户端 下载地址&#xff1a;https://www.docker.com/products/docker-desktop docker --version #查看docker版本 docker-compose --version #查看docker-compose版本 2&#xff0c;安装环境 使用一键安装包&#xff1a;https://gitee.com/yes…

量子遗传算法优化VMD参数,五种适应度函数任意切换,最小包络熵、样本熵、信息熵、排列熵、排列熵/互信息熵...

关于量子遗传算法&#xff0c;在众多文献均有应用。下面简述一下原理。 &#xff08;1&#xff09;量子比特编码 子遗传算法通过引入量子比特来完成基因的存储和表达。量子比特是量子信息中的概念&#xff0c;它与经典比特不同&#xff0c;是因为它可以在同一时刻处于两个状态的…

通天星CMSV6车载定位监控平台 SQL注入漏洞复现(XVE-2023-23744)

0x01 产品简介 通天星CMSV6车载定位监控平台拥有以位置服务、无线3G/4G视频传输、云存储服务为核心的研发团队,专注于为定位、无线视频终端产品提供平台服务,通天星CMSV6产品覆盖车载录像机、单兵录像机、网络监控摄像机、行驶记录仪等产品的视频综合平台。 0x02 漏洞概述 …

贪心算法(算法竞赛、蓝桥杯)--均分纸牌

1、B站视频链接&#xff1a;A30 贪心算法 P1031 [NOIP2002 提高组] 均分纸牌_哔哩哔哩_bilibili 题目链接&#xff1a;[NOIP2002 提高组] 均分纸牌 - 洛谷 #include <bits/stdc.h> using namespace std; int n,a[101],av,cnt;int main(){scanf("%d",&n);…

AWS云上面的k8s统一日志收集(Fluent Bit+EKS+CW)

目标 k8s上面的常见的统一日志方案是EFK&#xff0c;具体如下&#xff1a; E:elasticsearch;F:fluentd;K:kibana 这里我们变成了使用fluentd的AWS替代品Fluent Bit&#xff0c;直接将日志输出到CloudWatch组。不需要E和K了。不过&#xff0c;这样仅仅用于AWS EKS。 步骤 给…