docker
问题描述:
自启动时出现超时问题
start operation timed out. Terminating
排查流程:
journalctl -u docker.service
....
module=grpc
Jan 04 11:17:13 control03-55 dockerd[4466]: time="2023-01-04T11:17:13.302749974+08:00" level=info msg="blockingPicker: the picked transport is not ready, loop back to repick" module=grpc
Jan 04 11:17:13 control03-55 dockerd[4466]: time="2023-01-04T11:17:13.302751557+08:00" level=info msg="pickfirstBalancer: HandleSubConnStateChange: 0xc000099cd0, CONNECTING" module=grpc
Jan 04 11:17:13 control03-55 dockerd[4466]: time="2023-01-04T11:17:13.302848664+08:00" level=info msg="pickfirstBalancer: HandleSubConnStateChange: 0xc000099cd0, READY" module=grpc
Jan 04 11:17:13 control03-55 dockerd[4466]: time="2023-01-04T11:17:13.303117153+08:00" level=info msg="subscribe ctx=context.Background.WithCancel.WithCancel.WithValue(type peer.peerKey, val <not Stringer>).WithValue(type metadata.mdIncomingKey, val <not Stringer>).WithValue(type grpc.streamKey, val <not Stringer>).WithCancel fs=[namespace==plugins.moby,topic~=|^/tasks/|]"
Jan 04 11:17:20 control03-55 dockerd[4466]: time="2023-01-04T11:17:20.402577206+08:00" level=info msg="[graphdriver] using prior storage driver: overlay2"
Jan 04 11:18:40 control03-55 systemd[1]: docker.service: start operation timed out. Terminating.
Jan 04 11:18:40 control03-55 dockerd[4466]: time="2023-01-04T11:18:40.862071014+08:00" level=info msg="Processing signal 'terminated'"
为什么会超时?
每一个系统服务都有自己的启动时间限制,如果超时,会被systemd kill 掉;
如果服务的超时时间配置的比较小,就会出现意外kill
如何配置超时时间?
提到配置时间,就要配置这个服务的systemd 相关配置,涉及到三个目录:
/etc/systemd/system | Local configuration |
---|---|
/run/systemd/system | Runtime units |
/lib/systemd/system | Units of installed packages |
如果配置了相同配置,则优先级由高到低
- /etc/systemd/system:放置的是系统管理员安装的单元,但是实际使用过程中,用户可以自定义服务配置文件,并且放置在该目录,将该服务的配置文件的优先级提高
- /run/systemd/system:这个目录一般是进程在运行时动态创建unit文件的目录,一般很少修改,除非是修改程序运行时的一些参数时,即Session级别的,才在这里做修改
- /lib/systemd/system:包含的是软件包安装的单元,也就是说通过yum、dnf、rpm等软件包管理命令管理的systemd单元文件,都放置在该目录下
如何查看当前配置?
1、可以看到当前麒麟设置的docker 超时为 90s
[root@HS144 ~]# systemctl show docker |grep ^Timeout
Failed to parse bus message: Invalid argument
TimeoutStartUSec=1min 30s
TimeoutStopUSec=1min 30s
TimeoutAbortUSec=1min 30s
2、对比centos /lib/system/systemd/ 配置发现有TimeoutSec=0,可以通过修改/lib/system/systemd/docker.service 方式,使超时时间无穷大
3、添加自己的配置在/etc/system/systemd/
echo -e “[Service]\nTimeoutStartSec=0” > /etc/systemd/system/docker.service.d/startup-timeout.conf
4、使能配置
[root@x ctsiadmin]# systemctl daemon-reload
[root@x ctsiadmin]# systemctl show docker |grep ^Timeout
TimeoutStartUSec=infinity
解决方案:
系统安装时,默认会将unit文件放在/lib/systemd/system目录。如果我们想要修改系统默认的配置,比如docker.service,一般有两种方法:
在/etc/systemd/system目录下创建docker.service文件,里面写上我们自己的配置。
在/etc/systemd/system下面创建docker.service.d目录,在这个目录里面新建任何以.conf结尾的文件,然后写入我们自己的配置。推荐这种做法
不建议直接修改/lib/systemd/system
因为这样就不知道原生的rpm 配置文件内容,而且重新安装rpm 后会覆盖此文件