Laravel8执行Sail up启动时apt-get安装依赖报错如何解决
错误原因排查
- 核心问题是你使用的Laravel 8对应版本的Sail,默认采用Ubuntu 21.04作为基础镜像构建容器。Ubuntu 21.04属于非长期支持(非LTS)版本,官方早已停止维护,默认的软件源地址已经迁移到旧源归档区,原有官方源地址失效,因此在执行apt包安装步骤时出现拉取失败、Bad header line类报错。
- 次要可能性为当前网络环境访问Ubuntu官方源、ondrej/php第三方PPA源的链路不稳定,存在丢包、内容劫持类问题。
解决建议
方案1:替换为LTS版本Ubuntu基础镜像(优先推荐,稳定性最高)
- 进入项目目录:
cd example-app - 打开项目下
docker/8.0/Dockerfile文件(若使用其他PHP版本,打开对应版本号的目录下的Dockerfile) - 将文件首行的
FROM ubuntu:21.04修改为FROM ubuntu:22.04(22.04为LTS版本,官方维护周期长,软件源稳定可用) - 找到文件内添加ondrej/php源的代码行,将其中的
hirsute(Ubuntu 21.04的版本代号)替换为jammy(Ubuntu 22.04的版本代号) - 清理之前构建失败的Docker缓存:
docker system prune -f - 执行命令强制重新构建镜像并启动:
./vendor/bin/sail up --build
方案2:替换容器内的Ubuntu软件源为国内镜像
如果不需要更换基础镜像版本,可以在Dockerfile的首个apt-get update命令之前,添加以下两行代码替换默认源为国内镜像:
RUN sed -i "s@http://archive.ubuntu.com/ubuntu/@http://mirrors.aliyun.com/ubuntu/@g" /etc/apt/sources.list RUN sed -i "s@http://security.ubuntu.com/ubuntu/@http://mirrors.aliyun.com/ubuntu/@g" /etc/apt/sources.list
修改完成后清理Docker缓存,重新执行./vendor/bin/sail up --build即可。
方案3:网络适配调整
如果以上操作完成后仍存在拉取失败问题,可执行以下操作排查:
- 暂时关闭宿主设备的代理、VPN服务后重新构建
- 给Docker服务配置国内镜像加速地址,提升资源拉取稳定性
内容的提问来源于stack exchange,提问作者Niran Jones
相关产品推荐
相关产品推荐

