生产环境用Docker?先搞定这8个常见故障

标签: 生产 环境 docker | 发表时间:2020-06-01 01:15 | 作者:大卫
出处:http://weekly.dockone.io

维护生产环境中的Docker虚拟化应用,高效、稳定的运行至关重要。

但是,对于Docker的初学者而言,当容器或应用出现了问题,往往不知从何入手进行排查。

Docker虚拟化故障

Docker虚拟化主要有三类故障:
  • 应用故障:应用执行状态与预期不一致。
  • 容器故障:无法正确创建、停止、更新容器等。
  • 集群故障:集群创建失败、更新失败、无法连接等。


Docker虚拟化故障排错

所有的Docker虚拟化故障排查诊断,都可以通过Docker命令行工具或者Web控制台来完成。

通过WEB控制台查看,需要自建控制台,对于Docker运维管理员来说,命令行工具排错是一个不错的帮手。

故障排错案例 1

案例描述:

生产环境,全新安装的Docker无法启动,报错信息如下:
systemctl  start  docker.service  
Job for docker.service failed because
the control process exited with error code.See
"systemctl status docker.service" and "journalctl -xe" for details

通过journalctl -xe命令查看启动的详细日志,启动daemon错误,因为Selinux不支持,Selinux阻挡了Docker引擎的启动,如图所示:

解决方案:

如上问题,解决方法有两种:
  1. Selinux主配置文件:/etc/selinux/config,将配置文件中enforcing设置为disabled,然后重启系统,然后重启docker引擎即可。
  2. Docker主配置文件:/etc/sysconfig/docker,将配置文件中--selinux-enabled选项为false,改成:--selinux-enabled=false即可。


故障排错案例 2

案例描述:

Docker虚拟化引擎报错信息如下:

如上错误提示是因为Docker无法找到Group组信息,Docker组有可能被误删除,解决方法有两种:
  1. 创建宿主机docker组即可,命令:groupadd docker;
  2. /usr/lib/systemd/system/docker.socket文件,SocketGroup=修改为root也可以;


故障排错案例 3

案例描述:

Docker虚拟化引擎报错信息如下:

如上错误提示是因为Linux操作系统没有更多的Loopback设备给Docker使用。

解决方案:

创建更多的Loopback设备即可,命令如下:
for i inseq 0 6;do mknod -m 0660 /dev/loop$i b 7 $i;done  

故障排错案例 4

案例描述:

Docker命令执行,报错如下:
Cannot connect to the Docker daemon at unix:  
///var/run/docker.sock. Is the docker daemon running?

根据如上错误提示,该错误很明显可能是Docker没有启动。

解决方案:

检测Docker进程是否启动,ps -ef|grep docker,如果没有启动,启动Docker即可。

检测Docker进程存在,但是无法连接,可以重启一下Docker服务,检测一下Sock路径是否正确;

故障排错案例 5

案例描述:

Docker获取远程镜像,报错信息如下:
Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io  


该错误表示无法连接远程仓库Docker.io。

解决方案:

查看本地是否配置DNS,能否ping通docker.io;

如果能够ping通,但是下载还是比较慢,可以修改Docker仓库源为国内或者自建的仓库源;

Docker镜像修改方法,vim /etc/docker/daemon.json,执行如下命令:
at>/etc/docker/daemon.json<  

{
"registry-mirrors":["https://registry.docker-cn.com"]
}
EOF
service docker restart

故障排错案例 6

案例描述:

启动Docker容器,报错信息如下:
/usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: \"/bin/bash\": executable file not found in $PATH".  

如上报错新,通常是由于容器启动时,不支持该命令:/bin/bash。

解决方案:

解决方法有如下两种:

修改启动命令为正确的Docker容器启动命令,例如修改为:/bin/sh或者sleep 99999d等;

Docker镜像自身问题或者Docker引擎版本比较低导致,可以升级Docker引擎版本服务。

故障排错案例 7

案例描述:

Docker虚拟化运行中,报错信息如下:
Docker no space left on device  
Docker no space left on device
Docker no space left on device
Docker no space left on device
Docker no space left on device

如上错误,表示Docker虚拟化引擎平台,没有多月的空间设备所使用,证明容器磁盘不足或者物理机磁盘不足。

解决方案:

手工删除Docker容器占用数据比较大的目录;

或者通过docker system prune自动删除一些日志目录,此种方法会停止所有容器;

或者临时增加Docker存储硬盘等。

故障排错案例 8

案例描述:

Docker push上传镜像至本地仓库报错信息如下:
The push refers to a repository [106.12.133.186:5000/busybox] Get https://106.12.133.186:5000/v1/_ping: http: server gave HTTP response to HTTPS client  

根据如上错误提示,错误是由于客户端采用https,docker registry未采用https服务所致。一种处理方式是把客户对地址“106.12.133.186:5000”请求改为http。

解决方案:
vim /etc/docker/daemon.json 文件。  
在文件中写入:{ "insecure-registries":["106.12.133.186:5000"] } 。

保存退出后,重启Docker服务,问题即可解决。

原文链接: https://mp.weixin.qq.com/s/2GNKmRJtBGHhUyVBRbRgeA

相关 [生产 环境 docker] 推荐:

生产环境用Docker?先搞定这8个常见故障

- - DockOne.io
维护生产环境中的Docker虚拟化应用,高效、稳定的运行至关重要. 但是,对于Docker的初学者而言,当容器或应用出现了问题,往往不知从何入手进行排查. Docker虚拟化主要有三类故障:. 应用故障:应用执行状态与预期不一致. 容器故障:无法正确创建、停止、更新容器等. 集群故障:集群创建失败、更新失败、无法连接等.

利用Docker构建开发环境

- - UC技术博客
最近接触PAAS相关的知识,在研发过程中开始使用Docker搭建了自己完整的开发环境,感觉生活在PAAS时代的程序员真是幸福,本文会简要介绍下Docker是什么,如何利用Docker来搭建自己的开发环境(本文主要是面向Mac OS X),以及期间所遇到的一些坑和解决方案. (本文会要求你对PAAS、LXC、CGroup、AUFS有一定的了解基础,请自行Google ).

Racher Docker基础环境配置 | Rancher Docs

- -
因为K8S的规定,主机名只支持包含  - 和  .(中横线和点)两种特殊符号,并且主机名不能出现重复. 配置每台主机的hosts(/etc/hosts),添加. host_ip $hostname到. CentOS关闭selinux. 关闭防火墙(可选)或者放行相应端口. 对于刚刚接触Rancher的用户,建议在关闭防火墙的测试环境或桌面虚拟机来运行rancher,以避免出现网络通信问题.

基于docker环境实现Elasticsearch 集群环境

- - 学习日志
最近搭建了es集群的时候,现在需要测试添加一个新的数据节点,项目是使用docker-compose命令来搭建的. 以下基于最新版本 es7.2.0进行. // docker-compose.yaml 集群配置文件. 集群配置了3个master节点,并同时作为数据节点使用,当节点未指定 node.master和node.data的时候,默认值为 true.

使用 Docker 搭建 Java Web 运行环境

- - 码农网
Docker 是 2014 年最为火爆的技术之一,几乎所有的程序员都听说过它. Docker 是一种“轻量级”容器技术,它几乎动摇了传统虚拟化技术的地位,现在国内外已经有越来越多的公司开始逐步使用 Docker 来替换现有的虚拟化平台了. 作为一名 Java 程序员,我们是时候一起把 Docker 学起来了.

研发环境容器化实施过程(docker + docker-compose + jenkins) - 陈晨_软件五千言 - 博客园

- -
目前公司内部系统(代号GMS)研发团队,项目整体微服务规模大概是4+9+3的规模,4个内部业务微服务,9个是外部平台或者基础服务(文件资源/用户中心/网关/加密等),3个中间件服务(数据库/Redis/Nacos). 需求和排期都是会有交叉,会保证每周都有迭代内容交付,另外技术部门也在进行性能优化以及代码规约的重构.

Docker & Flatpak

- - IT瘾-dev
目前最流行的技术莫过于Docker,Docker和Docker衍生的东西用到了很多很酷的技术,目前deepin应用软件发布转变成flatpak,这些看似风牛马不相及的技术方案,实际都使用了一个共同的底层技术——Namespace,假如没有namespace支持,这些技术实现都将成为空中楼阁. 一句话总结,无论是Docker、sysmted-nspawn还是flatpak,都是在namespace基础上,针对不同的场景,生出的不同的解决方案.

在生产环境运行容器

- - IT瘾-tuicool
【编者的话】Vivek Juneja是一名工作首尔的云服务工程师. 他从2008年就开始接触云服务,是最早的AWS和Eucalyptus的使用者. 本文中总结了在生产环境中使用容器的几个方面,特别是对虚拟机与容器的混合部署的观点很值得推荐给大家. 如果只是把容器限制在开发测试环境中,那么您并没有享受到面向容器研发和发布工作的全部红利.

docker初体验之docker-tomcat

- - BlogJava-首页技术区
docker已经是现在最热的容器技术,最近也去体验了一下,在daocloud注册了一个账号,并开始本机实战docker. daocloud免费有两个容器可用,体验送T恤,邀请送书,这里我分享一个daocloud的邀请码 https://account.daocloud.io/signup?invite_code=mxeq2jkmcur37vz6ven8,daocloud是非常棒的容器云平台,使用体验好,问题响应也及时,绑定微信还送一个额外容器.

kubernetes移除Docker?

- -
两周前,Kubernetes在其最新的Changelog中宣布1.20之后将要弃用dockershime,也就说Kubernetes将不再使用Docker做为其容器运行时. 这一消息持续发酵,掀起了不小的波澜,毕竟Kubernetes+Docker的经典组合是被市场所认可的,大量企业都在使用. 看上去这个“弃用”的决定有点无厘头,那么为什么Kubernetes会做出这样的决定.