Docker容器创建时,无法访问镜像源:Could not connect to archive.ubuntu.com:80

1.问题描述

当基于dockerfile创建容器时,遇到Could not connect to ...Failed to fetch ...等异常时,大概原因是没有配置好容器创建所需的镜像源。这里以Ubuntu基础镜像源为例。

  • dockerfile内容
bash 复制代码
FROM ubuntu
RUN apt update && apt install python3 -y && apt install python3-pip -y && apt install git -y && apt install vim -y && apt install curl -y && apt install wget -y && apt install unzip -y && apt install zip -y && apt install tree -y && apt install npm -y
CMD ["bash"]
  • dockerfile执行与异常提示
bash 复制代码
$ docker build -f data/dockerfiles --tag my_test

Get:1 http://mirrors.tools.aliyun.com/ubuntu focal InRelease [265 kB]
Get:2 http://mirrors.tools.aliyun.com/ubuntu focal-updates InRelease [128 kB]
Get:3 http://mirrors.tools.aliyun.com/ubuntu focal-backports InRelease [128 kB]
此处省略......
Ign:33 http://archive.ubuntu.com/ubuntu noble InRelease
Ign:34 http://archive.ubuntu.com/ubuntu noble-updates InRelease
Ign:35 http://archive.ubuntu.com/ubuntu noble-backports InRelease
此处省略......
  Could not connect to archive.ubuntu.com:80 (185.125.190.81), connection timed out Could not connect to archive.ubuntu.com:80 (91.189.91.82), connection timed out Could not connect to archive.ubuntu.com:80 (91.189.91.81), connection timed out Could not connect to archive.ubuntu.com:80 (185.125.190.82), connection timed out Could not connect to archive.ubuntu.com:80 (185.125.190.83), connection timed out
Err:34 http://archive.ubuntu.com/ubuntu noble-updates InRelease
  Unable to connect to archive.ubuntu.com:80:
此处省略......
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/noble/InRelease  Could not connect to archive.ubuntu.com:80 (185.125.190.81), connection timed out Could not connect to archive.ubuntu.com:80 (91.189.91.82), connection timed out Could not connect to archive.ubuntu.com:80 (91.189.91.81), connection timed out Could not connect to archive.ubuntu.com:80 (185.125.190.82), connection timed out Could not connect to archive.ubuntu.com:80 (185.125.190.83), connection timed out
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/noble-updates/InRelease  Unable to connect to archive.ubuntu.com:80:
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/noble-backports/InRelease  Unable to connect to archive.ubuntu.com:80:
此处省略......

2.解决方案

本质上,是需要修改基于镜像文件创建的容器中的/etc/apt/sources.list文件,将该文件中的镜像源从官方源换成国内源。这里以Ubuntu基础镜像源为例,有如下两种可选方案实施。

2.1.从dockerfile添加命令修改(自动化、简单)

打开dockerfile,在FROM ...命令后添加镜像源修改命令即可,如下:

bash 复制代码
FROM ubuntu
# 镜像源修改命令
RUN sed -i "s@http://.*archive.ubuntu.com@http://mirrors.tools.aliyun.com@g" /etc/apt/sources.list
RUN sed -i "s@http://.*security.ubuntu.com@http://mirrors.tools.aliyun.com@g" /etc/apt/sources.list
# 容器软件安装命令
RUN apt update && apt install python3 -y && apt install python3-pip -y && apt install git -y && apt install vim -y && apt install curl -y && apt install wget -y && apt install unzip -y && apt install zip -y && apt install tree -y && apt install npm -y
CMD ["bash"]

添加镜像源修改命令后,再次执行容器构建命令docker build -f data/dockerfiles --tag my_test,即可快速完成容器构建。

2.2.从创建启动的基础镜像容器修改(略微繁琐)

  • (1)创建启动基础镜像的容器

    bash 复制代码
    $ docker run -it ubuntu /bin/bash
  • (2)进入容器命令行,然后手动修改sources.list文件

    shell 复制代码
    $ vim /etc/apt/sources.list
    
    # 官方sources.list文件内容
    deb http://archive.ubuntu.com/ubuntu/ bionic main restricted
    deb-src http://archive.ubuntu.com/ubuntu/ bionic main restricted
    deb http://archive.ubuntu.com/ubuntu/ bionic-updates main restricted
    deb-src http://archive.ubuntu.com/ubuntu/ bionic-updates main restricted
    deb http://archive.ubuntu.com/ubuntu/ bionic universe
    deb-src http://archive.ubuntu.com/ubuntu/ bionic universe
    deb http://archive.ubuntu.com/ubuntu/ bionic-updates universe
    deb-src http://archive.ubuntu.com/ubuntu/ bionic-updates universe
    deb http://archive.ubuntu.com/ubuntu/ bionic multiverse
    deb-src http://archive.ubuntu.com/ubuntu/ bionic multiverse
    deb http://archive.ubuntu.com/ubuntu/ bionic-updates multiverse
    deb-src http://archive.ubuntu.com/ubuntu/ bionic-updates multiverse
    deb http://archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse
    deb-src http://archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse
    deb http://security.ubuntu.com/ubuntu/ bionic-security main restricted
    deb-src http://security.ubuntu.com/ubuntu/ bionic-security main restricted
    deb http://security.ubuntu.com/ubuntu/ bionic-security universe
    deb-src http://security.ubuntu.com/ubuntu/ bionic-security universe
    deb http://security.ubuntu.com/ubuntu/ bionic-security multiverse
    deb-src http://security.ubuntu.com/ubuntu/ bionic-security multiverse

    将上述官方sources.list文件内容修改为如下:

    sehll 复制代码
    deb http://mirrors.tools.aliyun.com/ubuntu bionic main restricted
    deb-src http://mirrors.tools.aliyun.com/ubuntu bionic main restricted
    deb http://mirrors.tools.aliyun.com/ubuntu bionic-updates main restricted
    deb-src http://mirrors.tools.aliyun.com/ubuntu bionic-updates main restricted
    deb http://mirrors.tools.aliyun.com/ubuntu bionic universe
    deb-src http://mirrors.tools.aliyun.com/ubuntu bionic universe
    deb http://mirrors.tools.aliyun.com/ubuntu bionic-updates universe
    deb-src http://mirrors.tools.aliyun.com/ubuntu bionic-updates universe
    deb http://mirrors.tools.aliyun.com/ubuntu bionic multiverse
    deb-src http://mirrors.tools.aliyun.com/ubuntu bionic multiverse
    deb http://mirrors.tools.aliyun.com/ubuntu bionic-updates multiverse
    deb-src http://mirrors.tools.aliyun.com/ubuntu bionic-updates multiverse
    deb http://mirrors.tools.aliyun.com/ubuntu bionic-backports main restricted universe multiverse
    deb-src http://mirrors.tools.aliyun.com/ubuntu bionic-backports main restricted universe multiverse
    deb http://mirrors.tools.aliyun.com/ubuntu bionic-security main restricted
    deb-src http://mirrors.tools.aliyun.com/ubuntu bionic-security main restricted
    deb http://mirrors.tools.aliyun.com/ubuntu bionic-security universe
    deb-src http://mirrors.tools.aliyun.com/ubuntu bionic-security universe
    deb http://mirrors.tools.aliyun.com/ubuntu bionic-security multiverse
    deb-src http://mirrors.tools.aliyun.com/ubuntu bionic-security multiverse

    注意,重要事情说3遍:
    该步骤一定是在启动的基础镜像容器内部执行!!!
    该步骤一定是在启动的基础镜像容器内部执行!!!
    该步骤一定是在启动的基础镜像容器内部执行!!!

  • (3)在当前容器中,手动安装dockerfile中列出的其他软件包

    bash 复制代码
    apt update && apt install python3 -y && apt install python3-pip -y && apt install git -y && apt install vim -y && apt install curl -y && apt install wget -y && apt install unzip -y && apt install zip -y && apt install tree -y && apt install npm -y
相关推荐
我没有开挂1 小时前
旧 docker 版本通过 nvkind 搭建虚拟多节点 gpu 集群的坑
运维·docker·容器
小鸡,啄米1 小时前
centos9安装docker 配置docker代理
运维·docker·容器
在肯德基吃麻辣烫2 小时前
Netdata在Ubuntu环境下的安装与配置:构建实时系统监控与性能分析平台
linux·运维·ubuntu
遇见火星3 小时前
jenkins流水线常规配置教程!
运维·docker·jenkins
LunarCod4 小时前
Ubuntu使用Docker搭建SonarQube企业版(含破解方法)
linux·运维·服务器·ubuntu·docker·开源·sonarqube
ZHOU_WUYI7 小时前
使用 Docker 部署 React + Nginx 应用教程
nginx·react.js·docker
南棱笑笑生7 小时前
20250512给NanoPi NEO core开发板在Ubuntu core20.04系统更新boot.img
linux·运维·ubuntu
小锋学长生活大爆炸8 小时前
【教程】Docker更换存储位置
运维·docker·容器
小哈里11 小时前
【pypi镜像源】使用devpi实现python镜像源代理(缓存加速,私有仓库,版本控制)
开发语言·python·缓存·镜像源·pypi
川石教育12 小时前
测试工程师如何学会Kubernetes(k8s)容器知识
云原生·容器·kubernetes·kubernetes容器·kubernetes教程