linux实现开机自动启动Docker并运行特定镜像的容器

 更新时间:2025年06月19日 10:41:44   作者:悟能不能悟  
在 CentOS 7 中实现开机自动启动 Docker 并自动运行特定镜像的容器主要有两种方法,本文将为大家详细介绍一下具体实现代码,希望对大家有所帮助

方法 1:使用 Docker 的 --restart 策略(简单高效,推荐)

这是最简洁直接的方案,利用 Docker 内置的重启策略来实现:

​确保 Docker 开机启动​:

sudo systemctl enable docker

​启动容器时添加重启策略​:

docker run -d \
  --name my-container \
  --restart=unless-stopped \  # 关键参数!
  nginx:latest

(可选)如果容器已存在,更新配置:

docker update --restart=unless-stopped my-container
重启策略行为
unless-stopped除非手动停止,否则系统重启后自动运行(推荐)
always总是重启(即使手动停止后也会自动重启)
on-failure仅当容器非正常退出时重启

方法 2:使用 Systemd 服务(更精细控制)

当需要更复杂的启动顺序或参数时使用:

​创建服务文件​:

sudo vi /etc/systemd/system/docker-myapp.service

添加以下内容​(替换为你的镜像和参数):

[Unit]
Description=My Docker Container Service
After=docker.service  # 确保在 Docker 启动后运行
Requires=docker.service
 
[Service]
Type=simple
# 确保先移除旧容器(清理)
ExecStartPre=-/usr/bin/docker rm -f my-container
# 启动新容器
ExecStart=/usr/bin/docker run \
  --name my-container \
  -p 80:80 \
  nginx:latest
# 停止命令
ExecStop=/usr/bin/docker stop my-container
# 清理命令
ExecStopPost=/usr/bin/docker rm my-container
TimeoutStartSec=90
Restart=on-failure
 
[Install]
WantedBy=multi-user.target

​启用服务​:

sudo systemctl daemon-reload
sudo systemctl enable docker-myapp.service
sudo systemctl start docker-myapp.service

常见镜像启动示例

1. 启动 MySQL 容器

docker run -d \
  --name mysql-db \
  --restart=unless-stopped \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -p 3306:3306 \
  -v /data/mysql:/var/lib/mysql \
  mysql:8.0

2. 启动 Nginx 容器

docker run -d \
  --name web-server \
  --restart=unless-stopped \
  -p 80:80 \
  -p 443:443 \
  -v /path/to/html:/usr/share/nginx/html \
  -v /path/to/nginx.conf:/etc/nginx/nginx.conf \
  nginx:alpine

3. 启动自定义应用

docker run -d \
  --name my-app \
  --restart=unless-stopped \
  -p 8080:3000 \
  -e ENV=production \
  my-registry.com/my-custom-image:v1.2

重要注意事项

​1.安全加固​:

# 限制容器权限
--security-opt="no-new-privileges" \
--read-only \
--cap-drop=ALL

​.2资源限制​:

--cpus="1.0" \
--memory="512m" \
--memory-swap="1g"

3.​日志管理​:

--log-opt max-size=10m \
--log-opt max-file=3

4.​健康检查​:

docker inspect --format='{{json .State.Health}}' my-container

验证和调试

1.检查服务状态​:

systemctl status docker-myapp.service

2.​查看容器日志​:

docker logs -f my-container

3.​测试重启​:

sudo reboot
# 重启后验证
docker ps
curl http://localhost

4.​诊断启动问题​:

journalctl -u docker-myapp.service -b -n 100 --no-pager

最佳实践建议

1.​使用 Docker Compose(生产推荐)​​:

version: '3'
services:
  web:
    image: nginx:alpine
    restart: unless-stopped
    ports:
      - "80:80"
  db:
    image: mysql:8.0
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: secret

然后设置 systemd 启动 compose:

ExecStart=/usr/local/bin/docker-compose -f /path/to/docker-compose.yml up

2.​版本控制​:

  • 始终指定容器标签(如 nginx:1.23-alpine 而非 nginx:latest)
  • 在 Dockerfile 或 compose 文件中固化版本

3.​数据持久化​:

-v mysql_data:/var/lib/mysql  # 使用命名卷

通过以上方法,您可以确保 CentOS 7 启动时自动运行 Docker 并启动指定的容器镜像。对于大多数场景,方法 1 的 --restart=unless-stopped 是最简单可靠的解决方案。

以上就是linux实现开机自动启动Docker并运行特定镜像的容器的详细内容,更多关于linux自动启动docker的资料请关注脚本之家其它相关文章!

相关文章

  • Linux下编译安装python3步骤

    Linux下编译安装python3步骤

    本篇文章主要介绍了Linux下编译安装python3,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • Apache控制是否显示站点目录(推荐)

    Apache控制是否显示站点目录(推荐)

    这篇文章主要介绍了Apache控制是否显示站点目录(推荐)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-11-11
  • Linux与Windows跨平台文件共享的实现方案

    Linux与Windows跨平台文件共享的实现方案

    在智慧工厂的应用场景中,常常需要通过工控机集中读取多台设备生成的日志来获取运行数据,由于设备通常运行 Windows 系统,而工控机多采用 Linux 环境,所以本文介绍了Linux与Windows跨平台文件共享的实现方案,需要的朋友可以参考下
    2025-04-04
  • apache虚拟主机配置: 二级目录访问跳转到其他根文件夹

    apache虚拟主机配置: 二级目录访问跳转到其他根文件夹

    这篇文章主要介绍了apache虚拟主机配置: 二级目录访问跳转到其他根文件夹,需要的朋友可以参考下
    2016-11-11
  • Linux之定时任务Crond详解

    Linux之定时任务Crond详解

    本篇文章主要介绍了Linux之定时任务Crond详解 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • 一文带你深入理解Linux中的nohup命令

    一文带你深入理解Linux中的nohup命令

    nohup是Linux和Unix系统中的一个命令,其作用是在终端退出时,让进程在后台继续运行。这篇文章主要来和大家讲讲它的使用,需要的可以参考一下
    2023-03-03
  • linux防火墙配置教程之访问外网web实验(3)

    linux防火墙配置教程之访问外网web实验(3)

    这篇文章主要为大家详细介绍了linux防火墙配置教程之访问外网web的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • linux查看端口是否开放的方法详解

    linux查看端口是否开放的方法详解

    在Linux中,端口是设备与外界通讯交流的出口,常用于指TCP/IP协议中的端口,其按照端口号可以分为三类,分别是:公认端口、注册端口、动态端口,那么Linux中如何查看开启了哪些端口?以下是常用命令介绍
    2024-03-03
  • linux wget下载tomcat方式

    linux wget下载tomcat方式

    这篇文章主要介绍了linux wget下载tomcat方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 解决xmapp中Apache端口号占用问题(Apache不能正常启动)

    解决xmapp中Apache端口号占用问题(Apache不能正常启动)

    小伙伴们安装xmapp后发现Apache不能正常开启,下面小编给大家带来了xmapp中Apache端口号占用问题的解决方法(Apache不能正常启动),需要的朋友参考下吧
    2017-05-05

最新评论