docker服务无法关停的原因
docker服务无法关停的原因在于,如果没有关闭docker.socket服务,那么只要执行docker指令,docker.socket就会激活docker服务
最近对交付的项目进行维护,需要关停docker服务。一开始做了如下操作:
systemctl stop docker
systemctl disable docker
以为后面设备重启时,docker就会自动关闭了。结果重启后,发现docker还是启动了。
systemctl is-enabled docker,确实发现docker是disable的。那是怎么回事呢?
这次直接在命令行中,执行systemctl stop docker,发现有警告,如下:
意思是,docker.socket可能也会把docker服务启动起来。
检查了一下,docker.socket的状态,发现这个服务确实处于运行状态。
那docker.socket又是干啥用的呢?
原来,安装了docker后,docker可以分为几个部分的内容:
1. docker客户端。
我们在shell中运行docker ps,docker image,其实调用的是docker客户端程序。一般存在于/usr/bin下,名字叫就做docker.
2. docker守护
存在于/usr/bin下,名字叫dockerd。我们讲的docker服务,实质上更多的就是这个dockerd服务。
3. docket.socket
用来实现docker和dockerd之间API通讯。在/lib/systemd/system/docker.socket中,是这样描述的:
我们执行docker指令时,实际上客户端会将指令发给dockerd。通过什么方式传送指令呢?默认是通过/var/run/docker.sock这个socket来实现(如果不是,需要在/etc/docker下面创建daemon.json文件)。但是通讯的话,光有socket这个通道是不够的,还需要访问这个通道的客户端和服务端程序。服务端程序就是docker.socket了。所以如果把docker.socket服务开启,同时执行docker ps等客户端指令,那么即使此时dockerd没有运行,docker.socket也会去将它拉起来。但是如果docker.socket这个服务也没有处于运行状态,那么就会报错:
所以要真正关闭docker服务,除了systemctl stop docker.service,还需要systemctl stop docker.socket。
更多推荐
所有评论(0)