构建Docker镜像时Conda更新失败,下载字节与Content-Length不匹配
问题:Docker构建时Conda下载字节数与Content-Length不匹配
在OSX系统使用Docker Desktop构建Docker镜像时,Conda提示下载字节数与Content-Length不匹配。对应的URL可正常访问,但执行docker build时始终出现该问题。已尝试更换conda-forge等不同通道,仍无法解决,且每次下载的字节数都不相同,怀疑是Docker的网络连接存在问题。
错误信息
#0 124.4 CondaError: Downloaded bytes did not match Content-Length #0 124.4 url: https://conda.anaconda.org/pytorch/linux-64/pytorch-1.11.0-py3.8_cuda11.3_cudnn8.2.0_0.tar.bz2 #0 124.4 target_path: /miniconda/pkgs/pytorch-1.11.0-py3.8_cuda11.3_cudnn8.2.0_0.tar.bz2 #0 124.4 Content-Length: 1097104794 #0 124.4 downloaded bytes: 124742074
#0 151.7 CondaError: Downloaded bytes did not match Content-Length #0 151.7 url: https://repo.anaconda.com/pkgs/main/linux-64/python-3.8.5-h7579374_1.conda #0 151.7 target_path: /miniconda/pkgs/python-3.8.5-h7579374_1.conda #0 151.7 Content-Length: 51673600 #0 151.7 downloaded bytes: 19806597
使用的Dockerfile
FROM nvidia/cuda:12.0.0-runtime-ubuntu22.04 WORKDIR /app RUN apt-get update && apt-get install -y wget git && apt-get clean RUN git clone https://github.com/db0/nataili.git . # Check out a specific version of the above repository RUN git checkout 6c2f1862bacf25b6bc74e95e3174ca45a116f85b RUN echo "boto3>=1.21.32">>requirements.txt # Download and install Miniconda RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh RUN bash Miniconda3-latest-Linux-x86_64.sh -b -p /miniconda # Add miniconda to the PATH ENV PATH=/miniconda/bin:$PATH # Update conda and install any necessary packages RUN conda update --name base --channel defaults conda && \ conda env create -f /app/environment.yaml --force && \ conda clean -a -y # Install conda environment into container so we do not need to install every time. ENV ENV_NAME ldm COPY ecs_run.py /app/ SHELL ["conda", "run", "-n", "ldm", "/bin/bash", "-c"] ENTRYPOINT ["conda", "run", "--no-capture-output", "-n", "ldm", "python", "ecs_run.py"]
解决方向及操作步骤
1. 检查Docker Desktop网络配置
- 打开Docker Desktop偏好设置,进入Resources > Network
- 关闭代理(如果开启),或切换代理模式为自动
- 勾选"Use the Docker daemon's DNS server",避免DNS解析异常
2. 增加Conda下载超时与重试次数
在Dockerfile的conda update命令前添加以下配置,提升Conda的网络容错性:
RUN conda config --set remote_connect_timeout_secs 60 \ && conda config --set remote_max_retries 5 \ && conda config --set remote_read_timeout_secs 120
3. 采用离线构建方式
- 本地手动下载Miniconda安装包和所需Conda依赖包,放入构建上下文目录
- 修改Dockerfile,使用本地文件替代在线下载:
也可在本地用# 替换原wget命令,用COPY复制本地文件 COPY Miniconda3-latest-Linux-x86_64.sh /app/ RUN bash Miniconda3-latest-Linux-x86_64.sh -b -p /minicondaconda pack打包完整环境,复制到容器中直接解压使用。
4. 调整Docker构建网络参数
执行构建命令时,使用宿主机网络模式,绕过Docker的网络隔离:
docker build --network=host -t your-image-tag .
注:OSX下Docker的host网络依赖虚拟机,修改后需重启Docker Desktop生效。
5. 清理Docker构建缓存
避免缓存的损坏文件干扰构建,执行:
docker build --no-cache -t your-image-tag .
内容的提问来源于stack exchange,提问作者Spoon
相关产品推荐
相关产品推荐

