做故障风的头像的网站,安徽网站开发哪家好,上海营销seo,wordpress视频无法播放视频播放本文针对Docker容器部署、维护过程中#xff0c;产生的问题和故障#xff0c;做出有针对性的说明和解决方案#xff0c;希望可以帮助到大家去快速定位和解决类似问题故障。
Docker是一种相对使用较简单的容器#xff0c;我们可以通过以下几种方式获取信息#xff1a;
1、…本文针对Docker容器部署、维护过程中产生的问题和故障做出有针对性的说明和解决方案希望可以帮助到大家去快速定位和解决类似问题故障。
Docker是一种相对使用较简单的容器我们可以通过以下几种方式获取信息
1、通过docker run执行命令或许返回信息
2、通过docker logs 去获取日志做有针对性的筛选
3、通过systemctl status docker查看docker服务状态
4、通过journalctl -u docker.service 查看日志
以下是整理的docker容器类问题故障分为9个类
一、启动类故障
1、docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
原因Docker未正常启动
解决方式systemctl start docker
2、cant create unix socket /var/run/docker.sock: is a directory
原因docker.sock不能创建
解决方式rm -rf /var/run/docker.sock
然后重新启动docker
3、Job for docker.service failed. Failed to start Docker Application 原因Selinux引起
解决方式/etc/sysconfig/selinux , 把 selinux 值改为disabled
重启docker解决
4、docker: Error response from daemon:
/var/lib/docker/overlay/XXXXXXXXXXXXXXXXXXXXXXX: no such file or directory.
原因docker没有指定目录或文件
解决方式
systemctl stop docker
rm -rf /var/lib/docker/*
systemctl start docker
重启run镜像启动容器
5、docker: Error response from daemon: Conflict. The container name XXX is already in use by container XXX. You have to remove (or rename) that container to be able to reuse that name.
原因docker name重名
解决方式改名容器或者删除重建容器
6、Error: Connection activation failed: No suitable device found for this connection
原因网卡配置问题
解决方式重启网卡
7、系统重启后docker无法启动
报错为docker0: iptables: No chain/target/match by that name
原因docker服务iptables问题
解决方式重启docker服务system restart docker
8、Error starting daemon: error initializing graphdriver: driver not supported
使用overlay2存储驱动启动docker daemon报错
原因daemon缺少配置
解决方式
添加配置
/etc/docker/daemon.json
{storage-driver: overlay2,
storage-opts: [overlay2.override_kernel_checktrue]}
9、Failed to start docker.service: Unit docker.service is masked.
未知原因docker 被mask
解决方式
systemctl unmask docker.service
systemctl unmask docker.socket
systemctl start docker.service
10、Failed to start docker.service: Unit is not loaded properly: Invalid argument.
未知原因docker服务无法正常load
解决方式卸载docker 删除docker.service
重新安装docker
11、docker-compose启动容器时报错
/usr/lib/python2.7/site-packages/requests/init.py:80: RequestsDependencyWarning: urllib3 (1.22) or chardet (2.2.1) doesnt match a supported version! RequestsDependencyWarning)
未知原因pip相应组件版本不支持
解决方式
pip uninstall urllib3
pip uninstall chardet
pip install requests
12、docker容器重启故障
强杀docker进程后重启docker。docker中的容器无法启动并报错
docker restart XXXXXXX Error response from daemon: Cannot restart container XXXXXXX: container XXXXXXXXXXXXXXXX: already exists
原因旧容器未安全退出
解决方式docker-containerd-ctr --address /run/docker/containerd/docker-containerd.sock --namespace c rm 容器hash_id
docker start 容器
13、docker重启错误-重启命令一直卡住
systemctl restart docker 卡住
未知原因可能是启动的容器数量过多或者磁盘IO问题
解决方式
systemctl start docker-cleanup.service
systemctl start docker
二、权限问题报错
14、Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock
解决方式
查看 /var/run/docker.sock所在用户组
将用户重新加入docker组中usermod -aG docker ${USER}
15、chown socket at step GROUP: No such process 原因docker无法找到Group组信息docker组有可能被误删除
解决方式groupadd docker
16、Post http:///var/run/docker.sock/v1.XXX /auth: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?
原因非Root用户管理Docker时权限不足
解决方式
groupadd docker
usermod -a -G docker user
17、docker commit镜像时报错
Error processing tar file(exit status 1): unexpected EOF
原因可能是权限问题引起
解决方式chmod x 加一个执行权限
三、镜像和仓库问题报错
18、Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io
原因Docker仓库无法访问
解决方式
修改Docker仓库源为国内或者自建的仓库源
修改/etc/docker/daemon.json
19、推送本地镜像报错
The push refers to a repository [XXXX] Get https://xxx/v1/_ping: http: server gave HTTP response to HTTPS client
原因docker registry未采用https服务所致
解决方式
/etc/docker/daemon.json 文件写入
{ insecure-registries:[] }
20、/usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go: starting container process caused exec: \/bin/bash\: executable file not found in $PATH.
原因Docker镜像自身问题或者Docker引擎版本比较低导致
解决方式可以升级Docker版本服务
21、构建镜像执行chown -R非常慢
原因Docker使用写时复制策略所以chown命令执行时会将上层镜像文件全部复制到当前层然后再修改权限再写入文件系统。
解决方式不应该使用chown -R 这类大批量修改文件的命令
22、docker build构建镜像的时候报错
Message from syslogd kernel:unregister_netdevice: waiting for lo to become free. Usage count 1
原因docker engine版本过高
解决方式docker engine版本需要和docker内部镜像的内核版本匹配
23、docker: Error response from daemon: containerd: container did not start before the specified time-out.ERRO[0133] error getting events from daemon: context canceled
原因修改完docker root dir重启后下载镜像报错
解决方式重启docker服务或者重启服务器
四、资源问题报错
24、Docker no space left on device
原因空间不足
解决方式清理空间,删除未被使用的容器镜像等资源
docker system prune -a
25、/var/lib/docker/containers 占用过大
原因日志文件占用过大
解决方式
cat /dev/null *-json.log
或者
增加dockerd启动参数/etc/docker/daemon.json
{log-driver:json-file,
log-opts: {max-size:2G, max-file:10}
26、max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
原因系统参数默认配置过小
解决方式修改/etc/sysctl.conf里面的vm.max_map_count 调大
27、Got starting container process caused process_linux.go:301:
running exec setns process for init caused \exit status 40\: unknown.
from time to time
原因可能是cache问题引起
解决方式echo 1 /proc/sys/vm/drop_caches
28、docker本机启动多台容器导致出现后续容器启动失败
原因查看硬盘空间是否满如果不是硬盘空间问题引起
解决方式
vim /etc/sysctl.conf
添加参数 fs.aio-max-nr 1048576
sysctl -p
29、Docker启动异常状态反复restarting Docker logs 容器名查看异常日志
查看/var/log/messages 原因内存跑满引起OOM
解决方式释放内存后再启动容器
五、版本不兼容报错
30、overlayfs: Cant delete file moved from base layer to newly created dir even on ext4
原因Centos 提供的文件系统 XFS 和 Overlay 兼容问题导致,
解决方式这个问题的修复在内核 4.4.6以上
31、docker: Error response from daemon: OCI runtime create failed: container_linux.go:344: starting container process caused process_linux.go:297: getting the final childs pid from pipe caused \read init-p: connection reset by peer\: unknown.
原因Docker版本和操作系统版本不匹配
解决方式重新安装和操作系统内核支持的docker 版本
六、网络或端口问题报错
32、WARNING: IPv4 forwarding is disabled. Networking will not work.
原因ipv4网络无法转发
解决方式:
/usr/lib/sysctl.d/00-system.conf
在最后一行添加net.ipv4.ip_forward1
重启network服务。删除错误的容器再次创建新容器
33、Creating network xxxxxxx with the default driver
原因docker网关冲突
启动容器、docker-compose启动容器后断网问题
解决方式配置 docker-compose.yml内给启动的容器配置参数network_mode: bridge
34、Unable to find a node that satisfies the following conditions [port xxxx]
原因当容器使用端口映射(docker run -p xxxx:xxxx或 compose模板中的
ports)之后 系统会在宿主机上创建一个port通过NAT来访问容器的指定port。如果宿主机上的端口被容器或者系统进程占用就会导致端口分配失败。
解决方式清除占用端口的容器或者进程或调整容器端口映射的宿主机端口避免冲突
35、Error response from daemon: service endpoint with name xxx already
原因端口已经被占用
解决方式重启docker容器
36、docker: Error response from daemon: driver failed programming external connectivity on endpoint XXXXX: Bind for 0.0.0.0:80 failed: port is already allocated
原因容器端口冲突
解决方式更换宿主机绑定端口
七、Docker安装报错
37、安装docker报Requires: container-selinux 2.9 原因container-selinux版本低或者是没安装的原因
解决方式
wget -O /etc/yum.repos.d/CentOS-Base.repo
http://mirrors.aliyun.com/repo/Centos-7.repo
yum install epel-release
yum makecache
yum install container-selinux
38、安装docker-compose时报错
“ImportError: module object has no attribute check_specifier”
原因setuptools版本问题
解决方式
升级setuptools到30.1.0版本以上版本
pip install --upgrade setuptools
39、安装docker-compose时报错
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 wont be maintained after that date. A future version of pip will drop support for Python 2.7.
原因python2.7提示升级
解决方式pip install -i https://pypi.douban.com/simple docker-compose
八、Docker删除报错
40、docker删除容器报错
Error response from daemon:Driver overlay failed to remove root filesystem xxxxx: remove/var/lib/docker/overlay2/xxxxx/merged: device or resource busy 原因容器挂载数据卷无法直接删除
解决方式
grep docker /proc/*/mountinfo | grep xxxxx
kill进程后
再重新删除容器
41、状态dead的容器删除报错
Error response from daemon: Driver aufs failed to remove root filesystem XXXXXXXXXXXXXXXX: aufs: unmount error after retries: /var/lib/docker/aufs/mnt/xxxxxxxx: device or resource busy
原因dead状态容器无法删除还在占用资源
解决方式docker rm -fv 容器id 过几分钟后会自动删除
42、docker删除镜像报错
Error response from daemon: conflict: unable to remove repository reference XXXX (must force) - container XXXX is using its referenced image YYYY
原因镜像正在被某容器使用
解决方式需要删除相关ID容器后才能删除镜像
43、docker删除镜像报错
Error response from daemon: conflict: unable to delete XXXXXXXXXX (must be forced) - image is referenced in multiple repositories
原因镜像login push 了远端其他仓库
解决方式如果不需要此镜像 docker rmi -f 强删
44、docker删除镜像报错
Error response from daemon: conflict: unable to delete XXX (cannot be forced) - image has dependent child images
原因存在依赖于父镜像的子镜像
解决方式强制删除镜像或者批量删除容器再删除镜像
九、其他报错
45、docker: Error response from daemon: driver failed programming external connectivity on end-point XXXXXXX: (iptables failed: iptables --wait -t filter -A DOCKER ! -i docker0 -o docker0 -p tcp -d 172.17.0.2 --dport 8080 -j ACCEPT: iptables: No chain/target/match by that name.
原因防火墙问题引起
解决方式关闭防火墙重启docker
46、执行docker info出现如下警告
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
原因配置问题引起需要启用bridge-nf-call-iptables
解决方式
vi /etc/sysctl.conf
添加以下内容
net.bridge.bridge-nf-call-ip6tables 1
net.bridge.bridge-nf-call-iptables 1
net.bridge.bridge-nf-call-arptables 1
47、docker数据库相关报错
使用Docker创建mysql容器闪退
Database is uninitialized and password option is not specified 解决方式docker run -d -e MYSQL_ROOT_PASSWORD[密码] -p 3306:3306 mysql镜像
为避免出现各种奇怪且偶发的问题运维和开发人员应该有规范的去使用docker容器最大程度的去避免因为使用不当而引起的故障参考以下
Docker使用规范建议
1.尽量使用最近1-2年的新的稳定的docker版本
不要去安装今年前很老的版本大量的bug已经被新版本更新解决掉了
2.尽量不要去创建非常大的镜像比如5G10G以上的
镜像要尽量轻量化去除不必要的软件数据等
3.容器内挂载宿主机配置使用只读
容器需要-v 宿主机的配置文件尽量使用ro只读
4.数据要挂载宿主机物理硬盘或存储节点上
不要直接在容器里run避免容器宕机引起数据丢失
5.应用日志一定要挂到宿主机上
不要直接打印到容器内避免只能docker logs方式查看避免去vulume目录里查看日志
6.不要只使用latest标签
Tag要有个管理标准可以根据tag查找对应版本
7.不要使用容器ip配置里更不能写死默认172.17.0.x
容器重启后ip很可能会变
8.尽量不要在单容器内跑多进程
容器不是虚拟机尽量做到1个容器1个进程
9.跨环境镜像保持一致
不论是测试UAT生产环境尽量保持同一个镜像不要变更环境变更只需要变更环境变量参数做区分
10.一定监控docker容器即使发现问题
建议使用prometheus监控容器
11.一定要限制docker容器的资源
尤其是CPU内存硬盘空间甚至是网络等避免侵占宿主机的硬件资源