Hostinger Docker 管理器常见问题排查教程
虽然 Docker 管理器简化了容器部署,但你偶尔仍可能遇到一些问题。本指南涵盖了最常见的问题及其解决方案,帮助你快速解决部署或运行时的问题。
注意
- 如果你尚未在 VPS 上安装 Docker,请参阅如何在 Hostinger 上使用 Docker VPS 模板。
如何访问部署日志
在排查问题之前,首先需要了解如何访问详细的部署日志:
-
点击右上角的 Web Console(网页控制台)按钮
-
查看项目的构建日志:
cat /docker/[project-name]/.build.log将
[project-name]替换为你的实际项目名称 -
检查输出中的错误消息或警告
这些日志包含有关镜像拉取、容器创建和启动过程的宝贵信息。
常见部署问题
问题 1:“端口已被占用”错误
症状:部署失败,并显示端口冲突的消息
解决方案:
-
检查哪些端口正在被使用:
sudo netstat -tlnp -
你可以:
- 在配置中选择其他端口
- 停止冲突的服务
- 修改端口映射(例如,将
80:80改为8080:80)
问题 2:“找不到镜像”错误
症状:Docker 无法拉取指定的镜像
解决方案:
-
验证镜像名称和标签:
- 正确格式:
image:tag(例如nginx:latest) - 检查是否有拼写错误
- 正确格式:
-
确保该镜像存在于 Docker Hub 或指定的镜像仓库中
-
对于私有镜像,请确保已配置身份验证
问题 3:容器启动后立即停止
症状:容器显示为 “Exited”(已退出)或不断重启
解决方案:
-
通过网页控制台检查容器日志:
docker logs [container-name] -
常见原因:
- 缺少环境变量
- 启动命令不正确
- 应用程序在启动时崩溃
-
验证是否设置了所有必需的环境变量
-
检查应用程序是否需要特定的文件权限
常见运行时问题
问题 4:无法通过浏览器访问应用程序
症状:应用程序似乎正在运行,但网页浏览器显示连接错误
解决方案:
-
验证端口映射是否正确:
- 检查是否使用的是 VPS 端口,而不是容器端口
- URL 格式:
http://your-vps-ip:vps-port
-
检查防火墙规则:
sudo ufw status -
确保应用程序正在监听正确的接口(0.0.0.0,而不是 localhost)
问题 5:容器内存不足
症状:容器因 “OOMKilled” 状态而崩溃,或应用程序变得无响应
解决方案:
-
检查容器资源使用情况:
docker stats [container-name] -
通过控制面板监控 VPS 资源
-
可以考虑:
- 升级你的 VPS 主机方案
- 优化你的应用程序
- 在 compose 文件中设置内存限制
问题 6:容器重启后持久化数据丢失
症状:容器更新后数据库或上传的文件消失
解决方案:
-
确保你已正确配置卷(volume):
- 格式:
/host/path:/container/path - 在主机上使用绝对路径
- 格式:
-
检查卷权限:
ls -la /path/to/volume -
验证卷是否已正确挂载:
docker inspect [container-name] | grep -A 10 Mounts
配置问题
问题 7:无效的 YAML 语法
症状:部署失败并出现解析错误
解决方案:
-
使用 YAML 预览面板来发现问题
-
常见的 YAML 错误:
- 缩进不正确(使用空格,不要使用制表符)
- 键后缺少冒号
- 值周围的引号使用不当
-
在部署之前使用在线工具验证你的 YAML
问题 8:环境变量不起作用
症状:应用程序找不到配置值
解决方案:
-
检查环境变量格式:
- 正确:
KEY=value - 等号前后不要有空格
- 正确:
-
对于多行值,使用正确的 YAML 语法:
environment:- KEY=value- MULTILINE_KEY=|line1line2 -
在容器内进行验证:
docker exec [container-name] env
网络问题
问题 9:容器之间无法通信
症状:多容器应用程序无法相互连接
解决方案:
-
确保容器位于同一个 compose 项目中
-
使用服务名称进行内部通信:
- 错误:
localhost:3306 - 正确:
mysql:3306(其中mysql是服务名称)
- 错误:
-
检查容器是否位于同一网络中:
docker network ls docker inspect [network-name]
问题 10:DNS 解析问题
症状:容器无法解析外部域名
解决方案:
-
检查 DNS 配置:
docker exec [container-name] cat /etc/resolv.conf -
测试 DNS 解析:
docker exec [container-name] nslookup google.com -
如有需要,在 compose 文件中配置自定义 DNS 服务器
性能问题
问题 11:容器启动缓慢
症状:容器启动时间异常长
解决方案:
-
检查镜像是否已在本地缓存:bash
docker images -
在拉取镜像期间监控下载速度
-
考虑使用更小的基础镜像(例如
alpine变体) -
确保你的 VPS 拥有足够的资源
问题 12:应用程序运行缓慢
症状:应用程序有响应但性能不佳
解决方案:
-
监控资源使用情况:bash
docker stats htop -
检查是否存在:
- CPU 限流
- 内存交换(swapping)
- 磁盘 I/O 瓶颈
-
优化你的应用程序或升级 VPS 资源
调试命令速查表
通过网页控制台执行这些命令:
# View all containersdocker ps -a
# Check container logsdocker logs [container-name] --tail 50 -f
# Access container shelldocker exec -it [container-name] /bin/sh
# View deployment logscat /docker/[project-name]/.build.log
# Check system resourcesfree -hdf -htop
# Inspect container configurationdocker inspect [container-name]
# View Docker daemon logsjournalctl -u docker -n 100避免问题的最佳实践
- 先在本地测试:在部署到 VPS 之前先在本地机器上测试
- 从简单配置入手:先部署单个容器,再扩展到多容器配置
- 使用版本标签:指定确切的版本,而不是使用
latest - 监控资源:随时关注 VPS 资源使用情况
- 定期备份:备份你的卷和配置
- 记录更改:跟踪哪些配置适合你的环境
请记住,大多数 Docker 管理器问题都有简单的解决方案。从部署日志入手,然后逐步完成相关的排查步骤。
其他资源
- 有关 Docker 核心概念和命令的完整概述,请参阅 Docker 教程。
- 为避免 compose 文件和部署中的常见陷阱,请查阅 Docker 最佳实践。
- 要删除 Docker 镜像、容器、卷和网络,请参阅如何删除所有 Docker 镜像、容器、卷和网络。