问题背景:目标是用阿里云的流水线,自己在codeup拉取代码,用maven打包成jar,并利用Dockerfile文件,将jar和jre打包成一个镜像,部署到ECS上。当前问题是在docker拉取jre的公共镜像时无法拉取,报错:
ERROR: failed to solve: DeadlineExceeded: DeadlineExceeded: DeadlineExceeded: eclipse-temurin:17-jre-alpine: failed to resolve source metadata for docker.io/library/eclipse-temurin:17-jre-alpine: failed to do request: Head "https://registry-1.docker.io/v2/library/eclipse-temurin/manifests/17-jre-alpine": dial tcp 104.244.43.234:443: i/o timeout
解决方案:先将jre的镜像包拉取到本地,再从本地上传到ACR,这样流水线构建的时候可以直接从ACR拉取到镜像,并且能享受到阿里云的镜像加速服务。
步骤 1:下载镜像到本地 / 构建机
优先用docker.1ms.run源拉取(避免 docker.io 的网络问题):
bash
# 拉取镜像(指定docker.1ms.run源)
docker pull docker.1ms.run/library/eclipse-temurin:17-jre-alpine
# 验证镜像是否下载成功
docker images
# 输出类似:docker.1ms.run/library/eclipse-temurin 17-jre-alpine xxxxxxxx 2 weeks ago 48MB
步骤 2:登录你的阿里云 ACR 实例
ACR控制台:容器镜像服务-->实例列表-->个人版实例-->镜像仓库-->点击已创建的仓库名称
根据基本信息中的操作指南,登录
bash
# 登录ACR(按提示输入阿里云账号密码,或用ACR控制台的临时登录令牌)
docker login crpi-****.cn-beijing.personal.cr.aliyuncs.com
步骤 3:给镜像打 ACR 仓库的标签(关键,符合 ACR 地址规范)
bash
# 打标签(替换为你的ACR信息)
docker tag docker.1ms.run/library/eclipse-temurin:17-jre-alpine \
crpi-*****.cn-beijing.personal.cr.aliyuncs.com/***/eclipse-temurin:17-jre-alpine
步骤 4:推送镜像到 ACR 的 指定仓库
bash
# 推送打标后的镜像到ACR
docker push crpi-****.cn-beijing.personal.cr.aliyuncs.com/***/仓库名:base-eclipse-temurin-17-jre-alpine
步骤 5:修改流水线的 Dockerfile(拉取 ACR 中的镜像)
bash
# 替换原FROM eclipse-temurin:17-jre-alpine
FROM crpi-*****.cn-beijing.personal.cr.aliyuncs.com/****/仓库名:base-eclipse-temurin-17-jre-alpine
# 后续的构建命令保持不变
WORKDIR /app
RUN apk add --no-cache shadow-utils \
&& groupadd -r appuser \
&& useradd -r -g appuser appuser \
&& apk del shadow-utils \
&& rm -rf /var/cache/apk/*
# ... 其他步骤(如复制JAR包、启动命令等)