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
相关推荐
一叶龙洲12 小时前
wslg打开Ubuntu24.04默认打开图形界面
linux·服务器·数据库·ubuntu
敖行客 Allthinker13 小时前
Parallels Ubuntu虚拟机项目如何让手机访问?完整解决方案
linux·运维·ubuntu
BullSmall14 小时前
Anolis OS 8.10 完整安装 Docker CE(生产可用,解决 podman 冲突)
docker·容器·podman
keyipatience15 小时前
线程栈与TLS和线程互斥
java·linux·服务器·开发语言·ubuntu
观山岳五楼16 小时前
Ubuntu 24 怎么使用Ubuntu 20 的镜像源
linux·运维·ubuntu
辰痕~17 小时前
物理机装Linux操作系统(Ubuntu为例)
linux·ubuntu
梦梦代码精18 小时前
开源AI应用平台BuildingAI解析:插件化架构、应用市场与热门案例
人工智能·机器学习·docker·开源
IT瑞先生20 小时前
Docker快速部署Mysql的三种方法——实操篇
mysql·adb·docker
梦远青城20 小时前
Docker 部署python的paddle进行OCR文字识别身份证
python·docker·ocr·paddle·身份证识别
CodexDave21 小时前
数据库连接池耗尽:排查顺序与三层兜底
服务器·前端·数据库·git·云原生·容器·kubernetes