Azure Pipeline构建Docker容器失败:无法获取Ubuntu软件包
问题:Azure Pipeline构建Docker镜像时无法连接Ubuntu软件源
报错信息
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/l/linux/linux-libc-dev_5.4.0-137.154_amd64.deb Unable to connect to archive.ubuntu.com:http: [IP: 185.125.190.39 80] E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing? Fetched 8,100 kB in 7min 33s (17.9 kB/s) The command '/bin/sh -c apt-get upgrade -y' returned a non-zero code: 100 ##[error]The command '/bin/sh -c apt-get upgrade -y' returned a non-zero code: 100
本地正常但Azure构建失败的Dockerfile内容
# example Dockerfile to expose a plumber service FROM rocker/r-ver:4.1.2 RUN apt-get update -qq RUN apt-get upgrade -y RUN apt-get install -y curl # Install required libraries RUN apt-get install -y \ libssl-dev \ libcurl4-gnutls-dev \ libsodium-dev \ unixodbc-dev \ r-cran-rodbc \ libxml2-dev RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - RUN curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list > /etc/apt/sources.list.d/mssql-release.list RUN apt-get update RUN ACCEPT_EULA=Y apt-get install -y msodbcsql18 RUN ACCEPT_EULA=Y apt-get install -y mssql-tools RUN echo 'export PATH="$PATH:/opt/mssql-tools17/bin"' >> ~/.bash_profile RUN echo 'export PATH="$PATH:/opt/mssql-tools17/bin"' >> ~/.bashrc # install the required packages package RUN R -e 'install.packages(c("dplyr", "devtools", "caret", "plumber", "readr", "yaml", "swagger", "RODBC"), dependencies = T)' RUN R -e 'library(devtools)' RUN R -e 'devtools::install_version(package = "xgboost", version = "1.6.0.1", repos = "https://cloud.r-project.org/")' # Copy everything in current folder to Docker container COPY / / # Expose the port EXPOSE 443 EXPOSE 80 EXPOSE 1433 # Run ENTRYPOINT ["Rscript", "model_expose.R"]
使用的Azure Pipeline配置(托管代理)
trigger: - master resources: - repo: self variables: # Container registry service connection established during pipeline creation dockerRegistryServiceConnection: <cnxn> imageRepository: <Image repo name> containerRegistry: <Azure container reg> dockerfilePath: '$(Build.SourcesDirectory)/tracking/4_docker_container/dockerfile' tag: '$(Build.BuildId)' DOCKER_BUILDKIT: 1 # Agent VM image name vmImageName: 'ubuntu-latest' stages: - stage: Build displayName: Build and push stage jobs: - job: Build displayName: Build pool: vmImage: $(vmImageName) steps: - task: Docker@2 displayName: Build and push an image to container registry inputs: command: buildAndPush repository: $(imageRepository) dockerfile: $(dockerfilePath) containerRegistry: $(dockerRegistryServiceConnection) tags: | $(tag)
解决方案
移除不必要的
apt-get upgrade -y步骤:rocker基础镜像的软件包已维护完善,强制升级易因网络波动或源同步问题失败。若确实需要更新,可替换为apt-get upgrade -y --fix-missing尝试自动修复,但更推荐直接跳过此步骤提升构建稳定性。更换Ubuntu软件源为国内镜像:在
apt-get update前替换源,提升Azure托管代理的下载速度,避免连接超时。修改Dockerfile开头部分:
FROM rocker/r-ver:4.1.2 # 替换为阿里云Ubuntu源 RUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list RUN sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list RUN apt-get update -qq # 后续步骤不变...
- 合并APT命令并清理缓存:将多个
apt-get命令合并,减少镜像层数量和网络交互次数,同时添加--no-install-recommends减少不必要的依赖安装,最后清理APT缓存减小镜像体积:
FROM rocker/r-ver:4.1.2 RUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list RUN sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list RUN apt-get update -qq && \ apt-get install -y --no-install-recommends \ curl \ libssl-dev \ libcurl4-gnutls-dev \ libsodium-dev \ unixodbc-dev \ r-cran-rodbc \ libxml2-dev && \ rm -rf /var/lib/apt/lists/* # 后续添加微软源等步骤...
- 切换托管代理镜像版本:将Pipeline中的
vmImageName从ubuntu-latest改为ubuntu-20.04,与rocker/r-ver:4.1.2的基础系统版本(Ubuntu 20.04)保持一致,减少环境兼容性问题。
内容的提问来源于stack exchange,提问作者Prenil Sewmohan
相关产品推荐
相关产品推荐

