解决阿里云中dockerhu被墙pull不下来的问题
解决阿里云中dockerhu被墙pull不下来的问题
一、Docker 环境准备
1.1 卸载旧版 Docker 组件
卸载所有已安装的 Docker 组件,避免潜在的冲突和兼容性问题(忽略“软件包未安装”的提示):
1
2
3
4
5
6
7
8
9
# 删除Docker相关源
sudo rm -f /etc/apt/sources.list.d/*docker*.list
# 卸载Docker和相关的软件包
for pkg in docker.io docker-buildx-plugin docker-ce-cli docker-ce-rootless-extras docker-compose-plugin docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove -y $pkg; done
注意:卸载 Docker 不会自动移除镜像、容器、存储卷和网络,这些数据默认存储在 /var/lib/docker/ 目录,需手动删除。
1.2 安装 Docker 社区版
适配说明
阿里云服务器:使用 http://mirrors.cloud.aliyuncs.com
非阿里云服务器:替换为 https://mirrors.aliyun.com
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 更新包管理工具
sudo apt-get update
# 添加Docker软件包源依赖
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# 添加Docker GPG密钥
sudo curl -fsSL http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# 添加Docker软件源
sudo add-apt-repository -y "deb [arch=$(dpkg --print-architecture)] http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 安装Docker核心组件(含Compose插件)
sudo apt-get -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
替代方案解决。
警告信息:Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
替代方案(彻底解决警告,推荐):
# 1. 下载GPG密钥并保存到trusted.gpg.d目录(替代apt-key add)
sudo curl -fsSL http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu/gpg -o /etc/apt/trusted.gpg.d/docker.gpg
# 2. 后续添加软件源、安装Docker步骤不变
1.3 启动并设置 Docker 开机自启
1
2
3
4
5
6
7
8
# 检查 Docker 版本(验证安装)
docker --version
# 启动Docker服务
sudo systemctl start docker
# 设置开机自启
sudo systemctl enable docker
1.4 配置 Docker 镜像加速器(解决拉取镜像失败)
由于运营商网络限制,直接从 Docker Hub 拉取镜像可能失败,需配置国内镜像加速器:
注意事项
docker search 命令会直接查询 Docker Hub,配置加速器后该命令仍可能失败,属正常现象。
配置步骤
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 1. 停止 Docker 服务(先停掉再改配置)
sudo systemctl stop docker
# 2. 创建/覆盖 daemon.json 配置文件(使用阿里云镜像源)
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://mirrors.aliyun.com"],
"insecure-registries": ["mirrors.cloud.aliyuncs.com"]
}
EOF
# 3. 重启 Docker 服务(加载新配置)
sudo systemctl daemon-reload
sudo systemctl start docker
# 4. 验证镜像源是否生效
docker info | grep -A 5 "Registry Mirrors"
终极兜底方案(完全绕开网络 / DNS)
完整操作步骤:导入镜像与项目打包(2023-10-01)
完整操作步骤(替换为「本地下载镜像包 → 上传服务器 → 导入构建」)
【前置说明】
所有「本地操作」在你的电脑(Windows/Mac/Linux)终端/命令提示符执行;「服务器操作」在阿里云服务器终端执行;
核心逻辑:先解决 openjdk:8-jdk-alpine 镜像拉取问题,再按你的原有流程执行打包、构建、启动。
第一步:本地操作 - 下载 OpenJDK 镜像并保存为 tar 包
1.1 本地安装 Docker(若未安装)
- Windows/Mac:下载 Docker Desktop,安装后启动(右下角/docker图标显示「Running」);
- Linux:本地终端执行
sudo apt install docker.io -y && sudo systemctl start docker。
1.2 本地拉取 OpenJDK 镜像并保存为 tar 包
打开本地终端/命令提示符,执行以下命令(全程在本地执行):
# 1. 拉取 openjdk:8-jdk-alpine 镜像(本地联网即可)
docker pull openjdk:8-jdk-alpine
# 2. 将镜像保存为 tar 包(保存到本地桌面,方便查找)
# Windows 命令(替换为你的用户名):
# docker save -o C:\Users\你的用户名\Desktop\openjdk8-jdk-alpine.tar openjdk:8-jdk-alpine
# Mac/Linux 命令:
docker save -o ~/Desktop/openjdk8-jdk-alpine.tar openjdk:8-jdk-alpine
执行后,本地桌面会生成 openjdk8-jdk-alpine.tar 文件(约 80MB)。
第二步:服务器操作 - 准备目录 + 上传文件
2.1 服务器创建目录(全程在服务器终端执行)
# 1. 登录服务器后,进入根目录(确保权限)
cd /
# 2. 创建 code 目录(若已存在则跳过)
sudo mkdir -p /code
# 3. 创建项目子目录(和你的项目名一致)
sudo mkdir -p /code/yuoj-code-sandbox-master
# 4. 赋予 code 目录读写权限(避免后续上传/打包报错)
sudo chmod -R 777 /code
2.2 上传文件到服务器(3类文件需上传)
① 上传本地项目文件到服务器 /code/yuoj-code-sandbox-master/
- 方式1:scp 命令(本地执行)
# 本地终端执行(替换「你的服务器IP」「本地项目路径」) scp -r /本地项目路径/yuoj-code-sandbox-master/* root@你的服务器IP:/code/yuoj-code-sandbox-master/
- 方式2:可视化工具(WinSCP/FileZilla)
- 连接服务器:IP=你的阿里云服务器IP,端口=22,用户名=root,密码=服务器密码;
- 本地找到项目文件夹
yuoj-code-sandbox-master,将所有文件拖到服务器/code/yuoj-code-sandbox-master/目录。
② 上传本地的 openjdk8-jdk-alpine.tar 到服务器 /code/ 目录
- 方式1:scp 命令(本地执行)
# Windows(替换用户名和服务器IP): # scp C:\Users\你的用户名\Desktop\openjdk8-jdk-alpine.tar root@你的服务器IP:/code/ # Mac/Linux(本地执行): scp ~/Desktop/openjdk8-jdk-alpine.tar root@你的服务器IP:/code/
- 方式2:可视化工具:将本地桌面的
openjdk8-jdk-alpine.tar拖到服务器/code/目录。
③ 上传 Dockerfile 和 docker-compose.service.yml 到对应目录
- 按你的原有要求:
Dockerfile上传到服务器/code/yuoj-code-sandbox-master/目录;docker-compose.service.yml上传到服务器/code/目录。
第三步:服务器操作 - 导入镜像 + 项目打包
3.1 服务器导入 OpenJDK 镜像(解决镜像拉取问题)
在服务器终端执行(全程在服务器执行):
# 1. 进入 /code 目录
cd /code
# 2. 导入本地镜像包(无需联网,直接加载)
sudo docker load -i openjdk8-jdk-alpine.tar
# 3. 验证镜像导入成功(能看到 openjdk:8-jdk-alpine 即可)
sudo docker images | grep openjdk
# 预期输出:openjdk 8-jdk-alpine xxxxxx About an hour ago
3.2 服务器打包项目(生成 target 目录和 jar 包)
# 1. 进入项目目录
cd /code/yuoj-code-sandbox-master
# 2. 执行 mvn 打包(若服务器未装 maven,先安装)
# 安装 maven(若未安装):
# sudo apt install maven -y
# 打包命令(跳过测试,加快速度)
mvn clean package -DskipTests
# 【备用方案】若服务器打包失败:
# 1. 本地执行 mvn clean package -DskipTests,生成 target 目录;
# 2. 将本地 target 目录上传到服务器 /code/yuoj-code-sandbox-master/ 目录;
# 3. 服务器执行:sudo chmod 777 /code/yuoj-code-sandbox-master/target/yuoj-code-sandbox-0.0.1-SNAPSHOT.jar
第四步:服务器操作 - 构建 + 启动容器(按你的原有流程)
4.1 确认文件路径正确(服务器执行)
# 检查 Dockerfile 路径
ls /code/yuoj-code-sandbox-master/Dockerfile
# 检查 docker-compose.service.yml 路径
ls /code/docker-compose.service.yml
# 检查 jar 包路径
ls /code/yuoj-code-sandbox-master/target/yuoj-code-sandbox-0.0.1-SNAPSHOT.jar
✅ 所有命令都能输出文件名,说明路径正确。
4.2 执行 docker compose 构建并启动(服务器执行)
# 进入 /code 目录
cd /code
# 执行构建+启动命令(你的原有命令,增加 sudo 避免权限问题)
sudo docker compose -f docker-compose.service.yml up yuoj-code-sandbox-master -d
4.3 检查容器启动状态(服务器执行)
# 查看容器是否启动成功
sudo docker ps -a | grep yuoj-code-sandbox-master
# 若容器未启动(状态为 Exited),查看日志排查问题:
sudo docker logs yuoj-code-sandbox-master
关键补充说明
- Dockerfile 无需修改:你的原有 Dockerfile 中
FROM openjdk:8-jdk-alpine可直接使用(因为已本地导入该镜像); - docker-compose.service.yml 无需修改:保持你原有内容即可;
- 常见问题排查:
- 若
docker logs显示「jar 包找不到」:检查target/yuoj-code-sandbox-0.0.1-SNAPSHOT.jar路径是否正确; - 若容器启动后端口不通:检查服务器安全组/防火墙是否开放 8090 端口;
- 若权限报错:执行
sudo chmod -R 777 /code赋予全权限。
- 若
总结
| 操作阶段 | 执行位置 | 核心命令 |
|---|---|---|
| 本地下载镜像 | 本地 | docker pull openjdk:8-jdk-alpine && docker save -o 桌面/xxx.tar 镜像名 |
| 服务器导入镜像 | 服务器 | cd /code && sudo docker load -i openjdk8-jdk-alpine.tar |
| 项目打包 | 服务器 | cd /code/yuoj-code-sandbox-master && mvn clean package -DskipTests |
| 构建启动容器 | 服务器 | cd /code && sudo docker compose -f docker-compose.service.yml up -d |
| 验证启动状态 | 服务器 | `sudo docker ps -a |
按以上步骤执行,可彻底解决镜像拉取问题,完全复用你的原有项目结构和启动流程。
本文由作者按照 CC BY 4.0 进行授权