Windows 10下Docker构建执行apt-get upgrade报403认证错误
解决PHP 5.6-Apache Docker镜像构建时apt-get upgrade 403错误的方案
问题根源
php:5.6-apache镜像基于Debian Stretch(9),该版本已终止所有官方支持,原有的deb.debian.org和security.debian.org源不再提供公开访问,因此下载升级包时返回403 authenticationrequired错误。
修复步骤
1. 切换到Debian存档源
修改Dockerfile,在apt-get update前替换apt源为Debian官方存档服务器,同时跳过过期源的有效性检查:
FROM php:5.6-apache RUN set -x \ # 替换Stretch系统源和安全源为存档地址 && echo "deb http://archive.debian.org/debian stretch main contrib non-free" > /etc/apt/sources.list \ && echo "deb http://archive.debian.org/debian-security stretch/updates main contrib non-free" >> /etc/apt/sources.list \ # 跳过源的有效期验证(存档源签名已过期) && apt-get update -o Acquire::Check-Valid-Until=false \ && apt-get upgrade -y
2. 推荐:移除不必要的upgrade操作
由于Debian Stretch已停止更新,apt-get upgrade不会获得任何安全补丁或功能更新,反而会增加镜像构建时间和体积。建议简化Dockerfile,仅替换源用于后续可能的扩展安装:
FROM php:5.6-apache RUN set -x \ && echo "deb http://archive.debian.org/debian stretch main contrib non-free" > /etc/apt/sources.list \ && echo "deb http://archive.debian.org/debian-security stretch/updates main contrib non-free" >> /etc/apt/sources.list \ && apt-get update -o Acquire::Check-Valid-Until=false
3. 企业网络代理排查
如果工作机处于企业内网,需确认Docker是否配置了正确的代理:
- Docker Desktop用户可在设置中添加HTTP/HTTPS代理地址
- 或在Dockerfile中临时注入代理环境变量:
若代理需认证,格式为ENV http_proxy=http://your-proxy-host:port ENV https_proxy=http://your-proxy-host:porthttp://username:password@proxy-host:port
内容的提问来源于stack exchange,提问作者Avdhut Mankavale
相关产品推荐
相关产品推荐

