当前位置: 代码网 > 服务器>服务器>Linux > linux实现开机自动启动Docker并运行特定镜像的容器

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

2025年06月19日 Linux 我要评论
方法 1:使用 docker 的 --restart 策略(简单高效,推荐)这是最简洁直接的方案,利用 docker 内置的重启策略来实现:​确保 docker 开机启动​:sudo systemct

方法 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的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com