Linux虚拟机关机前停止Docker容器失败的问题排查
解决关机时Docker服务先停止导致脚本无法连接的问题
问题根源
关机时systemd默认的服务停止顺序未保障自定义服务在Docker服务之前执行,导致Docker已停止后脚本才尝试连接Docker sock,出现EOF错误。
修改systemd服务配置
编辑/etc/systemd/system/unmount-disks.service文件,替换为以下内容:
[Unit] Description=Stop Docker containers before system shutdown Requires=docker.service Before=docker.service shutdown.target DefaultDependencies=no [Service] Type=oneshot RemainAfterExit=yes ExecStop=/usr/local/bin/unmount_disks.sh [Install] WantedBy=multi-user.target
关键参数说明
DefaultDependencies=no:禁用systemd默认关机依赖,避免服务被延后执行Requires=docker.service:确保Docker服务处于活跃状态时才执行脚本Before=docker.service shutdown.target:强制脚本在Docker服务停止、系统关机前执行Type=oneshot:适配一次性执行的脚本类型RemainAfterExit=yes:让systemd认为服务始终活跃,确保关机时触发ExecStop命令
生效配置并测试
执行以下命令重新加载systemd配置并启用服务:
systemctl daemon-reload systemctl enable unmount-disks.service
之后可尝试重启或关机,验证脚本是否能正常停止Docker容器,不再出现连接错误。
内容的提问来源于stack exchange,提问作者Alts
相关产品推荐
相关产品推荐

