问题:因业务需求,我在 Linux 上做了一个定时任务,定时执行重启容器的脚本。脚本内容如下:
#!/bin/bash
# enable_permission.sh - 启用权限要求配置
# ===== 配置区域 =====
CONFIG_DIR="" # 配置文件目录
CONFIG_TRUE="" # 启用权限的配置文件
TARGET_CONFIG="" # 目标配置文件名
CONTAINER_NAME="" # Docker 容器名称
LOG_FILE="/var/log/permission_config.log" # 共享日志文件
# ===== 日志函数 =====
log() {
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
local script_name=$(basename "$0")
echo "[$timestamp] [$script_name] $1" >> "$LOG_FILE"
}
# ===== 主函数 =====
main() {
log "开始执行"
# 1. 验证配置文件存在
if [[ ! -f "$CONFIG_DIR/$CONFIG_TRUE" ]]; then
log "错误: 配置文件 $CONFIG_TRUE 不存在!"
exit 1
fi
# 3. 复制配置文件
cp -f "$CONFIG_DIR/$CONFIG_TRUE" "$CONFIG_DIR/$TARGET_CONFIG"
log "复制配置: $CONFIG_TRUE → $TARGET_CONFIG"
# 4. 重启容器
if docker restart "$CONTAINER_NAME" > /dev/null; then
log "容器重启成功"
else
log "容器重启失败"
exit 2
fi
}
main
总体来言就是每天白天八点重启一次服务容器,晚上八点重启一次服务容器。
这个定时任务已经执行了一周多了,一直没有问题,但是昨晚十点客户那边发现服务无法访问,我上去看了下连二进制部署的宝塔也无法访问了。猜测是服务器网络崩了。然后今天上午八点 40 左右上班连接时发现服务恢复正常了。
查了下/var/log/message
,个人感觉比较重要的部分如下:
Aug 14 20:00:11 cap dockerd: time="2025-08-14T20:00:11.500905584+08:00" level=info msg="Container failed to exit within 10s of signal 15 - using the force" container=90828a5018f0fc3eb7019d2f5275b35eb9e79f5306e8aab459e12aaa287ed02a spanID=22a255e634fb0b5f traceID=5222a14c8585e9c7f65d909613b195d0
Aug 14 20:00:11 cap containerd: time="2025-08-14T20:00:11.604295589+08:00" level=info msg="shim disconnected" id=90828a5018f0fc3eb7019d2f5275b35eb9e79f5306e8aab459e12aaa287ed02a
Aug 14 20:00:11 cap containerd: time="2025-08-14T20:00:11.604343484+08:00" level=warning msg="cleaning up after shim disconnected" id=90828a5018f0fc3eb7019d2f5275b35eb9e79f5306e8aab459e12aaa287ed02a namespace=moby
Aug 14 20:00:11 cap containerd: time="2025-08-14T20:00:11.604354005+08:00" level=info msg="cleaning up dead shim"
Aug 14 20:00:11 cap dockerd: time="2025-08-14T20:00:11.604547353+08:00" level=info msg="ignoring event" container=90828a5018f0fc3eb7019d2f5275b35eb9e79f5306e8aab459e12aaa287ed02a module=libcontainerd namespace=moby topic=/tasks/delete type="*events.TaskDelete"
Aug 14 20:00:11 cap containerd: time="2025-08-14T20:00:11.621203827+08:00" level=warning msg="cleanup warnings time=\"2025-08-14T20:00:11+08:00\" level=info msg=\"starting signal loop\" namespace=moby pid=52083 runtime=io.containerd.runc.v2\n"
Aug 14 20:00:11 cap dockerd: time="2025-08-14T20:00:11.621741372+08:00" level=warning msg="ShouldRestart failed, container will not be restarted" container=90828a5018f0fc3eb7019d2f5275b35eb9e79f5306e8aab459e12aaa287ed02a daemonShuttingDown=false error="restart canceled" execDuration=11h59m59.316246392s exitStatus="{137 2025-08-14 12:00:11.579683933 +0000 UTC}" hasBeenManuallyStopped=true restartCount=0
Aug 14 20:00:11 cap avahi-daemon[1911]: Withdrawing address record for fe80::785f:e6ff:fe53:4e9c on veth4b6903b.
Aug 14 20:00:11 cap kernel: docker0: port 2(veth4b6903b) entered disabled state
Aug 14 20:00:11 cap kernel: docker0: port 2(veth4b6903b) entered disabled state
Aug 14 20:00:11 cap NetworkManager[1877]: <info> [1755172811.6551] manager: (vethdec9609): new Veth device (/org/freedesktop/NetworkManager/Devices/250)
Aug 14 20:00:11 cap avahi-daemon[1911]: Withdrawing workstation service for vethdec9609.
Aug 14 20:00:11 cap kernel: device veth4b6903b left promiscuous mode
Aug 14 20:00:11 cap kernel: docker0: port 2(veth4b6903b) entered disabled state
Aug 14 20:00:11 cap avahi-daemon[1911]: Withdrawing workstation service for veth4b6903b.
Aug 14 20:00:11 cap NetworkManager[1877]: <info> [1755172811.6667] device (veth4b6903b): released from master device docker0
Aug 14 20:00:11 cap journal: Removing a network device that was not added
Aug 14 20:00:11 cap libvirtd: 2025-08-14 12:00:11.670+0000: 2928: error : virFileReadAll:1460 : 打开文件 '/sys/class/net/vethdec9609/operstate' 失败: 没有那个文件或目录
Aug 14 20:00:11 cap libvirtd: 2025-08-14 12:00:11.670+0000: 2928: error : virNetDevGetLinkInfo:2552 : unable to read: /sys/class/net/vethdec9609/operstate: 没有那个文件或目录
Aug 14 20:00:11 cap journal: Removing a network device that was not added
Aug 14 20:00:11 cap kernel: docker0: port 2(veth916a435) entered blocking state
Aug 14 20:00:11 cap kernel: docker0: port 2(veth916a435) entered disabled state
Aug 14 20:00:11 cap kernel: device veth916a435 entered promiscuous mode
Aug 14 20:00:11 cap kernel: IPv6: ADDRCONF(NETDEV_UP): veth916a435: link is not ready
Aug 14 20:00:11 cap kernel: docker0: port 2(veth916a435) entered blocking state
Aug 14 20:00:11 cap kernel: docker0: port 2(veth916a435) entered forwarding state
Aug 14 20:00:11 cap NetworkManager[1877]: <info> [1755172811.6883] manager: (vethbcc5924): new Veth device (/org/freedesktop/NetworkManager/Devices/251)
Aug 14 20:00:11 cap NetworkManager[1877]: <info> [1755172811.6893] manager: (veth916a435): new Veth device (/org/freedesktop/NetworkManager/Devices/252)
Aug 14 20:00:11 cap containerd: time="2025-08-14T20:00:11.728945634+08:00" level=info msg="loading plugin \"io.containerd.event.v1.publisher\"..." runtime=io.containerd.runc.v2 type=io.containerd.event.v1
Aug 14 20:00:11 cap containerd: time="2025-08-14T20:00:11.729084477+08:00" level=info msg="loading plugin \"io.containerd.internal.v1.shutdown\"..." runtime=io.containerd.runc.v2 type=io.containerd.internal.v1
Aug 14 20:00:11 cap containerd: time="2025-08-14T20:00:11.729100825+08:00" level=info msg="loading plugin \"io.containerd.ttrpc.v1.task\"..." runtime=io.containerd.runc.v2 type=io.containerd.ttrpc.v1
Aug 14 20:00:11 cap containerd: time="2025-08-14T20:00:11.729349497+08:00" level=info msg="starting signal loop" namespace=moby path=/run/containerd/io.containerd.runtime.v2.task/moby/90828a5018f0fc3eb7019d2f5275b35eb9e79f5306e8aab459e12aaa287ed02a pid=52143 runtime=io.containerd.runc.v2
Aug 14 20:00:11 cap avahi-daemon[1911]: Withdrawing workstation service for vethbcc5924.
Aug 14 20:00:11 cap kernel: IPv6: ADDRCONF(NETDEV_CHANGE): veth916a435: link becomes ready
Aug 14 20:00:11 cap NetworkManager[1877]: <info> [1755172811.9243] device (veth916a435): carrier: link connected
Aug 14 20:00:11 cap journal: Removing a network device that was not added
Aug 14 20:00:12 cap systemd: Removed slice User Slice of root.
Aug 14 20:00:13 cap avahi-daemon[1911]: Registering new address record for fe80::9894:70ff:fe7c:5e48 on veth916a435.*.
把日志扔给 deepseek 说是 docker 容器强制终止触发宿主机内核网络栈状态异常。请问有这个可能吗?我不是专业运维,请问一下大家, 如果 docker restart 指令确实会影响宿主机网络协议栈,目前我只想到了以下方案: 把 docker restart 指令改为 docker stop + sleep + docker start 确保容器正常停止。然后 docker network prune --filter "unitl=24h"清理一下无用网络。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.