它卡住其实是正常的,它不是“死了”,是在干这几件事:
1. apt-get update:
你这个镜像是 Debian Bullseye 的(python:3.11-slim-bullseye),它默认去国外的源:
http://deb.debian.org/debian
http://deb.debian.org/debian-security
http://deb.debian.org/debian-updates
你看到的这几行就是在下索引:8MB+ 的 bullseye/main amd64 Packages 真得会下好一会儿,国内/政务网/服务器走外网慢,就会像你这样卡 300 多秒。
2. apt-get install libmagic1 file:
装包之前必须先把索引更新完,所以它一直在等网络。不是 libmagic1 本身大,是前面的索引大 + 源慢。
所以本质:你在麒麟机器上 build 的这个 Debian 容器在访问国外 Debian 源,网慢所以卡很久。
下面给你几种解决法,按方便程度排一下。
⸻
方法1:在 Dockerfile 里换成国内源
在 RUN apt-get update … 之前先换源,比如中科大/清华的 Debian 源(用哪个你内网能访问就写哪个)。
FROM python:3.11-slim-bullseye
RUN sed -i 's@http://deb.debian.org/debian@https://mirrors.tuna.tsinghua.edu.cn/debian@g' /etc/apt/sources.list \
&& sed -i 's@http://security.debian.org/debian-security@https://mirrors.tuna.tsinghua.edu.cn/debian-security@g' /etc/apt/sources.list
RUN apt-get update && \
apt-get install -y --no-install-recommends libmagic1 file && \
rm -rf /var/lib/apt/lists/*
这样它就不去国外拉 8M 的索引了,速度会一下子下去。
如果你这台麒麟只能访问内网镜像,那就把你们内网的 Debian 镜像地址写进去,思路一样。
⸻
方法2:干脆不装 apt 包(如果你只是为了 python-magic)
你这次装的是:
libmagic1
file
多半是因为 requirements 里有 python-magic 或者你要识别文件类型。要是你其实没用到、或者你可以用纯 Python 的实现,就可以先把这一段删掉,build 就飞快了:
# 先不要这段
# RUN apt-get update && \
# apt-get install -y --no-install-recommends \
# libmagic1 \
# file && \
# rm -rf /var/lib/apt/lists/*
先让镜像能 build 成功,再看真需要哪个系统包再说。
⸻
方法3:build 的时候用宿主机网络(可选)
有时候 docker 默认走的 DNS/出口慢,你可以试下:
docker build --network=host -t your-image .
compose 里也可以:
build:
context: .
network: host
这样它走宿主机的网络,可能就快很多。
⸻
方法4:做一层“基础镜像”缓存
你现在每次 docker-compose up -d --build,它都会跑一遍 apt-get update,这一步永远慢。可以先做一个单独的基础镜像:
# Dockerfile.base
FROM python:3.11-slim-bullseye
RUN sed -i 's@http://deb.debian.org/debian@https://mirrors.tuna.tsinghua.edu.cn/debian@g' /etc/apt/sources.list \
&& sed -i 's@http://security.debian.org/debian-security@https://mirrors.tuna.tsinghua.edu.cn/debian-security@g' /etc/apt/sources.list
RUN apt-get update && apt-get install -y --no-install-recommends libmagic1 file && rm -rf /var/lib/apt/lists/*
先 build:
docker build -f Dockerfile.base -t py311-magic:bullseye .
然后你的业务镜像写成:
FROM py311-magic:bullseye
WORKDIR /home/project
…
以后再 build 就不需要每次都更新索引了。
⸻
小结
• 它之所以“卡 349s”,就是在从 国外 Debian 源 下 大索引。
• 换国内源 / 内网源,或者先做一层基础镜像,就能解决。
• 这跟你宿主是麒麟 V10 没冲突,只是你拉的镜像是 Debian,而 Debian 默认源出国了。

6073

被折叠的 条评论
为什么被折叠?



