Docker镜像推送失败:EOF/管道破裂/连接关闭错误求助
Docker镜像推送至ECR/Docker Hub失败问题排查
尝试将Spring Boot应用镜像推送到AWS ECR和Docker Hub时均失败,出现三类网络相关错误,网络连接正常且拥有合法推送权限。
错误现象
1. EOF异常
My-MacBook-Pro-2 producer % docker push <awsAccountId>.dkr.ecr.ap-south-1.amazonaws.com/producer:latest The push refers to repository [<awsAccountId>.dkr.ecr.ap-south-1.amazonaws.com/producer] c7890551eec4: Waiting b32c59a2510d: Waiting 3d898485473e: Waiting 5b316a2cb183: Waiting a0ee1f650005: Waiting 45dff4c2315c: Waiting failed to do request: Head "https://<awsAccountId>.dkr.ecr.ap-south-1.amazonaws.com/v2/producer/blobs/sha256:c7890551eec49eefdd40b2b56d0e2f2f575641ed7de0c1da92ad94d63311b449": EOF
2. Broken Pipe(管道破裂)错误
My-MacBook-Pro-2 producer % docker push <awsAccountId>.dkr.ecr.ap-south-1.amazonaws.com/producer:latest The push refers to repository [<awsAccountId>.dkr.ecr.ap-south-1.amazonaws.com/producer] 3d898485473e: Pushing [==========> ] 6.488MB/30.05MB 45dff4c2315c: Pushing [==================================================>] 1.566MB/1.566MB a0ee1f650005: Layer already exists 5b316a2cb183: Pushing [=> ] 5.636MB/195.2MB c7890551eec4: Already exists b32c59a2510d: Pushing [==================> ] 6.783MB/17.82MB failed to copy: failed to do request: Put "https://<awsAccountId>.dkr.ecr.ap-south-1.amazonaws.com/v2/producer/blobs/uploads/7127e92e-d7a7-4147-984e-3dbdf8f12f0f?digest=sha256%3A3d898485473e3507374cea2e09f019c2ff5728f0911aa36c70b7a7235e9bc8ac": write tcp 192.168.65.3:58604->192.168.65.1:3128: write: broken pipe
3. Closed Connection(连接关闭)错误
My-MacBook-Pro-2 producer % docker push <awsAccountId>.dkr.ecr.ap-south-1.amazonaws.com/producer:latest The push refers to repository [<awsAccountId>.dkr.ecr.ap-south-1.amazonaws.com/producer] a0ee1f650005: Layer already exists c7890551eec4: Already exists b32c59a2510d: Pushing [======================> ] 7.93MB/17.82MB 3d898485473e: Pushing [=============> ] 7.93MB/30.05MB 5b316a2cb183: Pushing [==> ] 7.864MB/195.2MB 45dff4c2315c: Pushed failed to copy: failed to do request: Put "https://<awsAccountId>.dkr.ecr.ap-south-1.amazonaws.com/v2/producer/blobs/uploads/1867b7ba-801e-473d-b876-3d605b084822?digest=sha256%3Ab32c59a2510d79e17fa6c4c4598df1fa2a9d03967a435984e9fd8231d9d7b541": write tcp 192.168.65.3:59342->192.168.65.1:3128: use of closed network connection
Docker版本信息
My-MacBook-Pro-2 producer % docker version Client: Version: 26.1.4 API version: 1.45 Go version: go1.21.11 Git commit: 5650f9b Built: Wed Jun 5 11:26:02 2024 OS/Arch: darwin/arm64 Context: desktop-linux Server: Docker Desktop 4.31.0 (153195) Engine: Version: 26.1.4 API version: 1.45 (minimum version 1.24) Go version: go1.21.11 Git commit: de5c9cf Built: Wed Jun 5 11:29:12 2024 OS/Arch: linux/arm64 Experimental: false containerd: Version: 1.6.33 GitCommit: d2d58213f83a351ca8f528a95fbd145f5654e957 runc: Version: 1.1.12 GitCommit: v1.1.12-0-g51d5e94 docker-init: Version: 0.19.0 GitCommit: de40ad0
Dockerfile内容
FROM openjdk:19-jdk-slim WORKDIR /app COPY target/*-SNAPSHOT.jar app.jar EXPOSE 8080 ENTRYPOINT ["java","-jar","app.jar"]
排查与解决方案
1. 检查代理配置
错误日志中出现192.168.65.1:3128,这是Docker Desktop内置代理地址:
- 打开Docker Desktop -> Settings -> Resources -> Proxies,确认代理配置是否正确,无需代理则选择"No proxy",重启Docker后重试。
- 检查系统代理状态,若开启需确保Docker适配代理规则,或临时关闭系统代理后测试。
2. 降低推送并发数
多线程推送易因网络不稳定中断,尝试单线程推送:
docker push --max-concurrent-uploads 1 <镜像名称:标签>
3. 重新登录远程仓库
- AWS ECR:刷新登录凭证
aws ecr get-login-password --region ap-south-1 | docker login --username AWS --password-stdin <awsAccountId>.dkr.ecr.ap-south-1.amazonaws.com
- Docker Hub:重新验证凭证
docker login
4. 重置Docker网络配置
打开Docker Desktop -> Settings -> Network -> 点击"Reset to factory defaults",重置后重启Docker再尝试推送。
5. 优化镜像大小与分层
使用多阶段构建减小镜像体积,减少推送数据量:
# 构建阶段 FROM maven:3.8.6-openjdk-19 AS builder WORKDIR /app COPY pom.xml . RUN mvn dependency:go-offline COPY src/ ./src/ RUN mvn package -DskipTests # 运行阶段 FROM openjdk:19-jre-slim WORKDIR /app COPY --from=builder /app/target/*-SNAPSHOT.jar app.jar EXPOSE 8080 ENTRYPOINT ["java","-jar","app.jar"]
6. 检查本地安全工具
临时关闭本地防火墙、杀毒软件等网络拦截工具,确认是否因拦截导致推送失败。
内容的提问来源于stack exchange,提问作者sss
相关产品推荐
相关产品推荐

