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