问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Docker容器开机自启动的三种方法

创作时间:
作者:
@小白创作中心

Docker容器开机自启动的三种方法

引用
1
来源
1.
https://docs.pingcode.com/baike/3472706

通过配置 Docker 容器开机自启动,可以确保在服务器重启后,容器能够自动恢复运行,从而保证服务的高可用性和稳定性。方法主要包括:使用 Docker 的
--restart
选项、配置系统服务(如 systemd)自动启动 Docker、编写启动脚本。下面将详细介绍如何实现这些方法,并深入探讨它们的优缺点及适用场景。

一、使用 Docker 的

--restart
选项

Docker 提供了
--restart
选项来设置容器的自动重启策略。通过这个选项,可以指定容器在特定条件下重启。

1.1、

no
重启策略

no
是默认策略,表示容器不会自动重启。

1.2、

on-failure
重启策略

on-failure
指定容器仅在退出状态非零时重启。可以设置重启次数限制。


docker run --restart=on-failure:5 your_container  

1.3、

always
重启策略

always
表示无论容器是正常退出还是异常退出,都会自动重启。


docker run --restart=always your_container  

1.4、

unless-stopped
重启策略

unless-stopped
表示容器除非被手动停止,否则都会自动重启。


docker run --restart=unless-stopped your_container  

二、配置系统服务自动启动 Docker

可以配置系统服务(如 systemd)来确保 Docker 服务在系统启动时自动运行,这样容器也能在 Docker 启动后按指定的重启策略启动。

2.1、在 systemd 中配置 Docker 服务

步骤如下:

  1. 编辑 Docker 服务配置文件

sudo systemctl enable docker  
  1. 创建或编辑 Docker 容器的 systemd 服务文件

sudo nano /etc/systemd/system/my_docker_container.service  

文件内容如下:


[Unit]  

Description=My Docker Container  
After=docker.service  
Requires=docker.service  
[Service]  
Restart=always  
ExecStart=/usr/bin/docker start -a your_container  
ExecStop=/usr/bin/docker stop -t 2 your_container  
[Install]  
WantedBy=default.target  
  1. 重新加载 systemd 配置并启用服务

sudo systemctl daemon-reload  

sudo systemctl enable my_docker_container  
sudo systemctl start my_docker_container  

三、编写启动脚本

编写一个脚本,在系统启动时执行该脚本来启动 Docker 容器。

3.1、编写启动脚本

创建脚本文件:


sudo nano /usr/local/bin/start_docker_containers.sh  

文件内容如下:


#!/bin/bash  

docker start your_container  

保存并退出后,给脚本执行权限:


sudo chmod +x /usr/local/bin/start_docker_containers.sh  

3.2、配置脚本在启动时运行

将脚本添加到系统的启动配置中。以
systemd
为例:

  1. 创建或编辑 systemd 服务文件

sudo nano /etc/systemd/system/start_docker_containers.service  

文件内容如下:


[Unit]  

Description=Start Docker Containers  
After=docker.service  
[Service]  
Type=oneshot  
ExecStart=/usr/local/bin/start_docker_containers.sh  
[Install]  
WantedBy=multi-user.target  
  1. 重新加载 systemd 配置并启用服务

sudo systemctl daemon-reload  

sudo systemctl enable start_docker_containers  
sudo systemctl start start_docker_containers  

四、总结

通过以上方法,可以实现 Docker 容器的开机自启动。从简便性和易用性角度看,使用 Docker 的
--restart
选项是最为推荐的方法。对于需要更复杂启动逻辑的场景,可以选择配置系统服务或编写启动脚本。

核心观点:使用 Docker 的
--restart
选项、配置系统服务(如 systemd)自动启动 Docker、编写启动脚本。

六、附加内容

6.1、

--restart
选项的详细解释

**
--restart
选项不仅能设置容器的重启策略,还能根据具体需求配置重启次数和延迟时间**。例如,
on-failure:5
表示当容器退出状态非零时重启,最多重启 5 次。

6.2、systemd 服务的高级配置

systemd 提供了更多高级配置选项,如设置服务依赖、指定服务启动顺序等。这些配置可以进一步优化 Docker 容器的启动和运行。

6.3、编写启动脚本的最佳实践

编写启动脚本时,最好包括日志记录和错误处理,以便在脚本执行失败时能够迅速排查问题。例如:


#!/bin/bash  

{  
    echo "Starting Docker containers..."  
    docker start your_container  
    echo "Docker containers started successfully."  
} || {  
    echo "Failed to start Docker containers." >&2  
}  

通过以上方法和最佳实践,可以确保 Docker 容器在系统启动时自动运行,从而提高服务的稳定性和可用性。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号