手账正文
Docker 容器不能上网?先分清镜像拉取和容器代理
电脑能上网,Docker 里的下载却超时,很容易让人以为“代理已经配置了,怎么还不行”。先看失败的是拉镜像,还是容器里某个软件联网。
这几处设置不一定共用
Docker 自身拉取镜像、构建时下载依赖、容器内的程序访问网络,可能需要分别配置。某一步成功,只能证明那一步在当前条件下可用。
因此,先保存准确错误和发生阶段,再找对应设置,不要把同一段代理地址到处复制。
容器里的 127.0.0.1,通常指容器自己
在常见的普通容器网络中,电脑上可用的 127.0.0.1:7890 原样放进容器,未必能找到电脑上的代理。
Docker Desktop 提供 host.docker.internal 这类访问宿主机的方式,但不能把它当成所有 Docker 环境都自动支持的名称。原生 Linux、远端 Docker 或其他网络模式,需要按相应文档处理。
找到宿主机,还要确认入口可达
检查电脑客户端实际启用的端口与代理类型,以及是否允许来自该网络的连接。地址正确但入口只接受特定来源,也可能失败。
只开放必要范围,不要为省事把本地代理直接暴露到公网。若 Docker 运行在远端机器上,宿主机也不是你眼前这台电脑。
配置更新,不一定改变旧容器
Docker 文档中通过客户端配置传入的代理环境变量,主要用于之后创建的容器和构建,已有容器不会自动被改写。先确认自己正在测试的是哪一个实例。
让一次明确请求成功后,再安排长期配置。代理凭据不要写进要公开的镜像或配置示例,分享日志前也要检查相关变量。
评论