插件窝 干货文章 docker容器挂了怎么重启

docker容器挂了怎么重启

容器 Docker 重启 端口 758    来源:    2025-04-06

当Docker容器意外停止时,可以通过以下步骤进行排查和重启:


1. 查看容器状态

docker ps -a  # 查看所有容器(包括已停止的)
  • 确认目标容器的STATUS是否为Exited,并记录CONTAINER ID或名称。

2. 重启容器

docker start <容器ID或名称>  # 直接启动已停止的容器

3. 如果重启失败,排查原因

查看容器日志

docker logs <容器ID或名称>  # 检查错误日志
  • 常见问题:
    • 端口冲突:修改宿主机端口映射(如 -p 8080:80-p 8081:80)。
    • 依赖服务未启动:确保数据库、Redis等依赖项已运行。
    • 应用崩溃:检查应用日志(如Java堆溢出、Python异常等)。

检查容器配置

docker inspect <容器ID或名称>  # 查看详细配置(如挂载卷、环境变量等)

4. 重新运行容器(可选)

如果配置需要调整,可删除旧容器并重新创建:

docker rm <容器ID或名称>  # 删除容器(需先停止)
docker run -d --name <名称> [其他参数] <镜像名>  # 重新运行
  • 常用参数:
    • -p 宿主机端口:容器端口(端口映射)
    • -v 宿主机路径:容器路径(挂载卷)
    • -e KEY=VALUE(环境变量)

5. 设置自动重启(推荐)

在运行容器时添加--restart策略,避免手动干预:

docker run -d --restart unless-stopped <镜像名>
  • 策略选项
    • no:不自动重启(默认)
    • on-failure:非0退出时重启
    • always:总是重启
    • unless-stopped:除非手动停止,否则一直重启

6. 高级排查

  • 资源不足bash docker stats # 查看容器资源占用(CPU/内存)
    • 内存不足时可通过-m 512m限制内存。
  • 文件系统问题bash docker exec -it <容器ID> sh # 进入容器检查文件

常见场景示例

场景1:MySQL容器崩溃后重启

docker logs mysql_container  # 查看错误
docker start mysql_container  # 直接启动
# 或调整配置后重新运行
docker run -d --name mysql \
  -e MYSQL_ROOT_PASSWORD=123456 \
  --restart unless-stopped \
  -v /data/mysql:/var/lib/mysql \
  mysql:8.0

场景2:Nginx端口冲突

docker stop nginx_old
docker run -d --name nginx_new -p 8080:80 nginx

通过以上步骤,可以快速恢复容器运行。关键是通过日志定位根本原因,避免重复崩溃。