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

Docker镜像构建网络访问异常问题求助

问题描述

宿主机为Pop_OS,Docker已更新至最新版本,/etc/docker/daemon.json配置如下:

{        "dns": ["8.8.8.8", "8.8.4.4"]}

Ubuntu镜像构建失败场景

Dockerfile内容:

FROM ubuntu:latest
RUN apt-get install build-essential

执行docker build .时出现错误:

0.210 E: Unable to locate package build-essential
------
Dockerfile:2
--------------------
   1 |     FROM ubuntu:20.04
   2 | >>> RUN apt-get install build-essential
   3 |     
--------------------
ERROR: failed to solve: process "/bin/sh -c apt-get install build-essential" did not complete successfully

移除apt安装命令后,容器内/etc/resolv.conf内容:

root@0a3c00aaaae0:/# cat /etc/resolv.conf 
nameserver 127.0.0.11
options ndots:0

Alpine镜像构建成功场景

修改Dockerfile为:

FROM alpine:latest
RUN apk add curl

执行docker build .构建成功,容器内/etc/resolv.conf内容:

$ docker exec -it <container> /bin/sh
/ # cat /etc/resolv.conf 
nameserver 127.0.0.11
options ndots:0

该Alpine容器可正常ping通谷歌并进行网络交互。

请问导致Ubuntu镜像构建失败的原因是什么?


问题原因及解决办法

核心原因

Ubuntu镜像自带的软件源索引是旧的,直接执行apt-get install时,本地索引里找不到build-essential的最新包信息——这和DNS配置无关,你看到的127.0.0.11是Docker内置的DNS解析器,它会转发请求到你配置的8.8.8.8/8.8.4.4,Alpine能正常联网就说明DNS是正常的。而Alpine的apk工具默认在安装时会自动同步最新索引,或者镜像自带的索引足够新,所以没出现这个问题。

解决办法

修改Ubuntu的Dockerfile,先更新软件源索引再安装包:

FROM ubuntu:latest
RUN apt-get update && apt-get install -y build-essential

加-y是为了自动确认安装选项,避免构建过程中卡住。

如果想减少镜像体积,还可以清理安装缓存:

FROM ubuntu:latest
RUN apt-get update && \
    apt-get install -y build-essential && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

内容的提问来源于stack exchange,提问作者pri0ritize

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:53:13