Docker问题集绵
一、安装类型
问题1. docker-compose部署的容器启动报错
现象:Docker本身服务启动没有问题,但是docker-compose发布的服务容器启动报错,报错如下
原因:docker依赖的runc,但运行runc命令需要libseccomp.so.2
动态库
解决办法:下载依赖包并安装rpm -Uvh libseccomp-2.3.1-4.el7.x86_64.rpm --nodeps --force。
问题2:删除docker目录时报设备或资源忙
现象:准备重新安装docker,先rm -rf 删除docker目录时,报无法删除:xxx设备或系统忙错误
原因:docker目录挂载问题
解决办法:
步骤一:查看挂载情况,cat /proc/mounts | grep 'docker';
步骤二:卸掉挂载,将错误提示里所有目录都卸载,如:umount docker/overlay2/89cfd03290f2120aea6fc6ef7948f2d68047f70e99907f66b1c9b2804d849606/merged;
步骤三:重新删除目录即可。
二、其他类型
问题1:Docker Swarm部署的服务容器无法启动怎么查看日志
现象:docker stack deploy -c发布的服务容器无法启动,怎么查看错误原因;
解决办法两种:
A. 非portainer服务,可以在portainer里面查看日志;
B. docker service ps --no-trunc {serviceName};
问题2:现网服务发现漏洞,比如fastjson反序列化远程代码执行漏洞,需要升级jar包
现象:现网那么多微服务,每个都用到fastjson包,而且上传文件较慢,难道非得代码打包镜像并上传替换么
解决办法:
第一步:先下载解决了漏洞的fastjson包,并上传到对应服务器;
第二步:写脚本循环拷贝文件到对应目录
#/bin/bash for file in `find / -type f -name fastjson-1.2.47.jar` do dir=${file%fastjson-1.2.47.jar} cp /data/fastjson-1.2.70.jar $dir done;
第三步:查找服务器上包含原有的fastjson包并删除,命令为 find / -type f -name fastjson-1.2.47.jar -exec rm -rf {} \;
问题3:Docker磁盘空间满了
问题4:Docker Swarm部署的服务启动报error creating VXLAN interface: file exists错误
现象:subnet sandbox join failed for \"10.0.0.0/24\": error creating VXLAN interface: file exists
原因:某些情情况下vxlan并没有随着容器的停止(不知道是停止还是删除)而被释放(删除),导致后续启动容器的时候,无法创建vxlan导致容器无法启动;
解决办法:
第一步:查看vxlan接口 ip -d link show | grep vx;
第二步:删除vxlan接口 ip link delete vx-00100f-drzik;
第三步:重新发布服务。
问题5:portainer里服务日志错误信息显示task: non-zero exit (137)
现象:docker里部署的服务,隔一段时间就自动重启,查看日志报task: non-zero exit (137)
原因:137错误码对应OOM异常,docker inspect 容器ID显示如下,docker容器启动时设置了最大内存限制,而容器中java程序运行所需内存设置的数值大于等于容器配置的最大内存,导致程序运行一段时间后自动重启;
解决办法:调大jvm参数或者docker限制参数
问题6:服务容器重新启动时报iptables错误
现象:服务容器重新启动时报iptables错误
原因:docker网络被打乱了
解决办法:重启docker,systemctl restart docker;
问题7:基于已有nginx打包镜像添加软链接报错
现象:基于已有nginx打包镜像添加软链接,将服务日志重定向到标准流输出;
Sending build context to Docker daemon 146MB Step 1/2 : FROM nginx:1.22.0 ---> 15f7b4a94c7d Step 2/2 : RUN ln -sf /dev/stdout /var/log/nginx/access.log ---> Running in 09026c43b7ee ln: failed to access '/var/log/nginx/access.log/stdout': Not a directory The command '/bin/sh -c ln -sf /dev/stdout /var/log/nginx/access.log' returned a non-zero code: 1 [root@dev rws-sdp]# cd /var/log
原因:已有nginx镜像已经有软链接
解决办法:不用添加即可,或者换个方式。
问题8:nginx.conf文件直接挂载时,宿主机修改后容器内不同步,需要重启才可以
现象:在宿主机上修改nginx.conf文件保存后,采用热加载方式发现未生效;
原因:当使用vim之类的编辑器进行保存时,它不是直接保存文件,而是采用了备份
、替换
的策略。就是编辑时,创建了一个新文件,在保存的时候把备份文件替换为源文件,这个时候文件的inode
就发生了变化,而原来indode对应的文件其实并没有修改,也就是容器内的文件没有变化。当重启容器的时候,会挂载新的inode。
解决办法:挂载目录而非挂载文件或者修改文件权限chmod 777 nginx.conf。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗