M1芯片Mac中Docker构建长期卡在上下文传输的解决求助
解决Docker构建卡在上下文传输/基础镜像拉取的问题
问题场景
在搭载M1芯片的macOS 13.2系统中,使用Docker 20.10.14(build a224086)执行镜像构建命令时,构建进程长期卡在基础镜像拉取和上下文传输阶段,构建日志如下:
➜ docker build -f ./Dockerfile -t=reddwarf-pro/cha-server:v1.0.0 . [+] Building 318.6s (4/10) => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 671B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/python:3.10-alpine3.16 5.7s => [1/6] FROM docker.io/library/python:3.10-alpine3.16@sha256:b2d1f7c5ef2aad57f135104240e91c5327d9c414a58517f1080d55ed6a7a591d 312.8s => => resolve docker.io/library/python:3.10-alpine3.16@sha256:b2d1f7c5ef2aad57f135104240e91c5327d9c414a58517f1080d55ed6a7a591d 0.0s => => sha256:df0ead61b76e5f4e46838cd42d2a8c682d9ee2f368619d1b5f2dccc683f4ceaa 3.15MB / 12.29MB 312.8s => => sha256:b2d1f7c5ef2aad57f135104240e91c5327d9c414a58517f1080d55ed6a7a591d 1.65kB / 1.65kB 0.0s => => sha256:33733c1204f5f1619290fe3a4d4bbcb28574c7df61ccf0048f46d04c29e0ad21 1.37kB / 1.37kB 0.0s => => sha256:fb50eb7b018f767e9df8538552d47a2ddd135622357afeb6f78a2ce0515f429c 6.33kB / 6.33kB 0.0s => => sha256:547446be3368f442c50ff95e2a2a9c85110b6b41bbb3c75b7e5ebb115f478b57 2.71MB / 2.71MB 227.6s => => sha256:fc7cc9366210bf87382129b842210a5f3b868c4400e56cfbae81b0cbaad66492 662.28kB / 662.28kB 51.9s => => sha256:1205151c85319d9ca7046006cce9419f2516d28daebd1839d5ee1eda18f21f13 240B / 240B 53.3s => => sha256:d8f3c223bf9d2d03b40f67b94f7baa7b292e319f8c520f566cb9cbe28056a15e 3.08MB / 3.08MB 290.0s => => extracting sha256:547446be3368f442c50ff95e2a2a9c85110b6b41bbb3c75b7e5ebb115f478b57 0.1s => => extracting sha256:fc7cc9366210bf87382129b842210a5f3b868c4400e56cfbae81b0cbaad66492 0.1s => [internal] load build context 21.6s => => transferring context: 564.82MB 21.6s
使用的Dockerfile内容:
FROM python:3.10-alpine3.16 LABEL jiangxiaoqiang (xiaoqiang@mail.com) ENV LANG=en_US.UTF-8 \ LC_ALL=en_US.UTF-8 \ TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \ && echo $TZ > /etc/timezone \ && mkdir -p /root/chat-server # upgrade pip RUN pip install --upgrade pip && apk add curl ADD . /root/chat-server/ EXPOSE 8001 RUN pip3 install -r /root/chat-server/requirements.txt WORKDIR /root/chat-server/ ENTRYPOINT exec python3 -m uvicorn main:app --port 8001 --host 0.0.0.0 --reload
解决方案
1. 优化构建上下文大小
从日志看,构建上下文传输了564.82MB,这会大幅拖慢构建速度。创建或完善.dockerignore文件,排除不需要加入构建上下文的文件:
# Python相关缓存和虚拟环境 __pycache__/ *.pyc *.pyo *.pyd venv/ .venv/ # 版本控制目录 .git/ .gitignore # IDE配置 .idea/ .vscode/ # 构建产物和临时文件 dist/ build/ *.log *.tmp *.bak # 操作系统文件 .DS_Store
2. 指定适配ARM64的基础镜像
M1是ARM架构,默认拉取的python:3.10-alpine3.16可能是AMD64版本,导致拉取缓慢或兼容性问题。修改Dockerfile的FROM行,指定ARM平台:
FROM --platform=linux/arm64 python:3.10-alpine3.16
3. 配置Docker镜像加速
在Docker Desktop中添加国内镜像源,加速基础镜像拉取:
- 打开Docker Desktop偏好设置 -> Docker Engine
- 在配置中添加镜像源,示例:
{ "registry-mirrors": [ "https://hub-mirror.c.163.com", "https://mirror.baidubce.com" ] } - 应用配置并重启Docker Desktop
4. 缩小构建上下文范围
如果项目目录中有大量无关文件,不要用.作为构建上下文,而是指定必要的目录。比如只传递代码目录和requirements.txt:
docker build -f ./Dockerfile -t=reddwarf-pro/cha-server:v1.0.0 ./src
注意需同步调整Dockerfile中的路径,确保ADD、RUN pip install等命令能正确找到文件。
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

