Laradock容器化Laravel应用跨机器部署失败求助
问题排查方案
一、部署后生成新容器卷的原因及解决
1. 检查外部卷是否存在
目标机器上执行以下命令,确认配置中指定的外部卷是否已创建:
docker volume ls
需要找到两个卷:
application-name_docker-in-docker(对应dind_engine)33d09b9dce23b55f46c8c4058a47e069377f9564705f7b68a650826bfeae836e(对应www)
如果其中任何一个卷不存在,Docker Compose会自动创建新卷,导致数据不匹配。
2. 重新恢复指定名称的卷
若卷不存在,需按以下步骤恢复:
- 创建指定名称的卷:
# 创建dind_engine对应的外部卷 docker volume create --name application-name_docker-in-docker # 创建www对应的外部卷 docker volume create --name 33d09b9dce23b55f46c8c4058a47e069377f9564705f7b68a650826bfeae836e
- 从备份文件恢复卷数据:
# 恢复dind_engine卷 docker run --rm -v application-name_docker-in-docker:/volume -v /path/to/backups:/backup alpine sh -c "tar xzf /backup/application-name_docker-in-docker.tgz -C /volume" # 恢复www卷 docker run --rm -v 33d09b9dce23b55f46c8c4058a47e069377f9564705f7b68a650826bfeae836e:/volume -v /path/to/backups:/backup alpine sh -c "tar xzf /backup/<原www卷名称>.tgz -C /volume"
注意:<原www卷名称>替换为备份时的卷名(即candidateVolumes中的对应项)。
3. 验证卷挂载正确性
启动容器后,进入workspace容器检查挂载的目录内容:
docker exec -it application-name-workspace-1 ls /var/www
确认能看到Laravel项目的完整文件(包括public、vendor等目录)。
二、Nginx 80端口无响应的排查步骤
1. 检查Nginx容器状态
先确认容器是否正常运行:
docker ps | grep application-name-nginx-1
若容器未运行,查看启动日志定位错误:
docker logs application-name-nginx-1
常见错误包括:配置文件语法错误、挂载目录不存在、权限不足。
2. 检查端口占用情况
确认目标机器的80端口未被其他进程占用:
ss -tulpn | grep :80
如果有其他进程占用80端口,需停止该进程,或修改docker-compose.yml中的Nginx端口映射(如改为8080:80)。
3. 验证防火墙/安全组配置
确保目标机器的80端口对外开放:
- Ubuntu/Debian系统:
ufw status # 若未开放,执行:ufw allow 80/tcp
- CentOS/RHEL系统:
firewall-cmd --list-ports # 若未开放,执行:firewall-cmd --add-port=80/tcp --permanent && firewall-cmd --reload
4. 检查Nginx配置与挂载目录
进入Nginx容器,验证配置和挂载的项目文件:
# 进入容器 docker exec -it application-name-nginx-1 bash # 检查Nginx配置中的root路径 cat /etc/nginx/sites-available/default | grep root # 确认/var/www/public目录存在 ls -l /var/www/public
若/var/www/public不存在,说明www卷恢复失败或挂载错误,需重新恢复卷数据。
5. 测试容器内部访问
在Nginx容器内部测试是否能正常访问Laravel应用:
docker exec -it application-name-nginx-1 curl http://localhost
如果返回Laravel页面内容,说明容器内部正常,问题出在外部网络或端口映射;如果返回502/404等错误,继续排查PHP-FPM。
6. 检查PHP-FPM状态
确认PHP-FPM容器正常运行:
docker ps | grep application-name-php-fpm-1
查看PHP-FPM日志,检查是否有启动错误:
docker logs application-name-php-fpm-1
常见问题包括:缺少PHP扩展、php.ini配置错误、项目依赖(vendor目录)缺失。
三、额外注意事项
- 确认推送的Laradock镜像包含完整的运行环境:比如PHP-FPM镜像需安装Laravel所需的扩展(如mbstring、pdo_mysql等),Nginx镜像需包含正确的虚拟主机配置。
- 若项目依赖(如
vendor、node_modules)是在容器内安装的,需确保这些目录已包含在www卷的备份中,否则部署后会出现依赖缺失。
内容的提问来源于stack exchange,提问作者steinbring
相关产品推荐
相关产品推荐

