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磁盘空间满了

    可参考:如何清理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。

 

posted @ 2021-12-08 12:03  如幻行云  阅读(571)  评论(0编辑  收藏  举报