原因:我设置了 mysql 与 redis 容器但是没有设置开机启动 ,导致每次重启都需要手动去启动服务很麻烦。这篇博客记录我针对已有的容器设置开机启动的过程
确认待启动的容器
docker ps -a
更改启动容器启动策略
docker update --restart=always f22b1f5c7f07
docker update --restart=always 4df4a0094650
docker update --restart=always 38e41b93a263
为每个容器创建单元文件
paddy_manager
为每个容器创建一个Systemd服务单元文件。例如,对于paddy_manager
,创建/etc/systemd/system/paddy_manager.service
文件,内容如下:
[Unit]
Description=Paddy Manager Service
Requires=docker.service
After=docker.service
[Service]
Restart=aways
ExecStart=/usr/bin/docker start -a f22b1f5c7f07
ExecStop=/usr/bin/docker stop -t 2 f22b1f5c7f07
[Install]
WantedBy=default.target
对于其他容器也创建类似的文件,并相应地替换容器ID和服务描述。
redis
[Unit]
Description=my-redis Service
Requires=docker.service
After=docker.service
[Service]
Restart=aways
ExecStart=/usr/bin/docker start -a 4df4a0094650
ExecStop=/usr/bin/docker stop -t 2 4df4a0094650
[Install]
WantedBy=default.target
mysql
[Unit]
Description=mysql Service
Requires=docker.service
After=docker.service
[Service]
Restart=aways
ExecStart=/usr/bin/docker start -a 38e41b93a263
ExecStop=/usr/bin/docker stop -t 2 38e41b93a263
[Install]
WantedBy=default.target
-
启用并启动服务:
对于每个服务单元文件执行以下命令:
sudo systemctl daemon-reload sudo systemctl enable paddy_manager.service sudo systemctl start paddy_manager.service
如果paddy_manager
容器是通过Systemd服务单元文件设置为开机启动的,您需要执行以下步骤来关闭其开机启动:
-
停用Systemd服务: 首先,您需要停用专门为
paddy_manager
创建的Systemd服务单元。在终端中运行以下命令:sudo systemctl disable paddy_manager.service
这个命令会阻止
paddy_manager
服务在系统启动时自动启动。 -
检查服务状态: 可以通过下面的命令确认服务是否已经被设置为不自动启动:
sudo systemctl is-enabled paddy_manager.service
如果返回
disabled
,则表示开机启动已成功关闭sudo systemctl stop paddy_manager.service sudo rm /etc/systemd/system/paddy_manager.service
-
重新加载Systemd配置并查看更改: 最后,重新加载Systemd以应用更改,并检查是否有错误:
sudo systemctl daemon-reload sudo systemctl status paddy_manager.service
完成这些步骤后,paddy_manager
容器就不会再随系统启动自动启动了。记得根据实际情况替换命令中的paddy_manager.service
为实际的服务单元文件名,如果有所不同的话。
与Docker的管理机制兼容
如果你发现你使用docker stop 停止了 容器之后,又被重复启动,不方便配置的话,就将
Restart=aways
改为
Restart=on-failure
然后应用
sudo systemctl daemon-reload
sudo systemctl restart nginx
Restart=on-failure 模式介绍
这样修改后,当您或其它管理系统明确执行停止操作时,容器将停止运行并且不会被自动重启。