You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laradock容器化Laravel应用跨机器部署失败求助

问题排查方案

一、部署后生成新容器卷的原因及解决

1. 检查外部卷是否存在

目标机器上执行以下命令,确认配置中指定的外部卷是否已创建:

docker volume ls

需要找到两个卷:

  • application-name_docker-in-docker(对应dind_engine)
  • 33d09b9dce23b55f46c8c4058a47e069377f9564705f7b68a650826bfeae836e(对应www)

如果其中任何一个卷不存在,Docker Compose会自动创建新卷,导致数据不匹配。

2. 重新恢复指定名称的卷

若卷不存在,需按以下步骤恢复:

  1. 创建指定名称的卷:
# 创建dind_engine对应的外部卷
docker volume create --name application-name_docker-in-docker
# 创建www对应的外部卷
docker volume create --name 33d09b9dce23b55f46c8c4058a47e069377f9564705f7b68a650826bfeae836e
  1. 从备份文件恢复卷数据:
# 恢复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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 22:34:52