最近对交付的项目进行维护,需要关停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。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐