263 lines
5.4 KiB
Markdown
263 lines
5.4 KiB
Markdown
# Docker 镜像加速器配置指南
|
||
|
||
## 问题说明
|
||
|
||
错误信息显示无法连接到 Docker Hub (`registry-1.docker.io`),这是因为网络访问受限导致的。
|
||
|
||
## 解决方案
|
||
|
||
### 方案一:配置 Docker 镜像加速器(推荐)
|
||
|
||
#### 1. 创建或编辑 Docker 配置文件
|
||
|
||
```bash
|
||
# 创建 docker 配置目录(如果不存在)
|
||
sudo mkdir -p /etc/docker
|
||
|
||
# 编辑 daemon.json 配置文件
|
||
sudo nano /etc/docker/daemon.json
|
||
```
|
||
|
||
#### 2. 添加以下配置
|
||
|
||
```json
|
||
{
|
||
"registry-mirrors": [
|
||
"https://docker.mirrors.ustc.edu.cn",
|
||
"https://hub-mirror.c.163.com",
|
||
"https://mirror.baidubce.com",
|
||
"https://docker.nju.edu.cn"
|
||
],
|
||
"insecure-registries": [],
|
||
"log-driver": "json-file",
|
||
"log-opts": {
|
||
"max-size": "10m",
|
||
"max-file": "3"
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 3. 重启 Docker 服务
|
||
|
||
```bash
|
||
# 重新加载配置
|
||
sudo systemctl daemon-reload
|
||
|
||
# 重启 Docker
|
||
sudo systemctl restart docker
|
||
|
||
# 验证配置
|
||
docker info | grep -A 5 "Registry Mirrors"
|
||
```
|
||
|
||
#### 4. 测试拉取镜像
|
||
|
||
```bash
|
||
# 测试拉取一个小镜像
|
||
docker pull alpine:latest
|
||
|
||
# 如果成功,继续构建项目
|
||
cd /home/AIRouter
|
||
docker compose up --build -d
|
||
```
|
||
|
||
### 方案二:使用国内替代基础镜像
|
||
|
||
如果镜像加速器仍然不稳定,可以修改 Dockerfile 使用国内镜像源。
|
||
|
||
#### 修改后端 Dockerfile
|
||
|
||
创建 `backend/Dockerfile.cn`:
|
||
|
||
```dockerfile
|
||
# 使用国内 Go 镜像源
|
||
FROM golang:1.24-bookworm AS builder
|
||
|
||
WORKDIR /app
|
||
|
||
# 配置 Go 模块代理(使用国内镜像)
|
||
ENV GO111MODULE=on \
|
||
GOPROXY=https://goproxy.cn,https://goproxy.io,direct \
|
||
CGO_ENABLED=1
|
||
|
||
COPY go.mod go.sum ./
|
||
RUN go mod download
|
||
|
||
COPY . .
|
||
|
||
RUN go build -ldflags="-w -s" -o gateway main.go
|
||
|
||
# 运行阶段使用清华大学镜像源
|
||
FROM debian:bookworm-slim
|
||
|
||
RUN sed -i 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list.d/debian.sources && \
|
||
apt-get update && \
|
||
apt-get install -y --no-install-recommends ca-certificates wget && \
|
||
rm -rf /var/lib/apt/lists/*
|
||
|
||
WORKDIR /app
|
||
|
||
COPY --from=builder /app/gateway .
|
||
|
||
RUN mkdir -p /app/data
|
||
|
||
ENV DB_PATH=/app/data/gateway.db
|
||
|
||
EXPOSE 8080
|
||
|
||
CMD ["./gateway"]
|
||
```
|
||
|
||
#### 修改前端 Dockerfile
|
||
|
||
创建 `frontend/Dockerfile.cn`:
|
||
|
||
```dockerfile
|
||
FROM node:20-alpine AS builder
|
||
|
||
WORKDIR /app
|
||
|
||
# 配置 npm 使用国内镜像
|
||
RUN npm config set registry https://registry.npmmirror.com
|
||
|
||
COPY package*.json ./
|
||
RUN npm ci
|
||
|
||
COPY . .
|
||
RUN npm run build
|
||
|
||
FROM nginx:1.27-alpine
|
||
|
||
COPY --from=builder /app/dist /usr/share/nginx/html
|
||
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||
|
||
RUN echo "OK" > /usr/share/nginx/html/health
|
||
|
||
EXPOSE 80
|
||
|
||
CMD ["nginx", "-g", "daemon off;"]
|
||
```
|
||
|
||
#### 修改 docker-compose.yml
|
||
|
||
```yaml
|
||
version: '3.8'
|
||
|
||
services:
|
||
backend:
|
||
build:
|
||
context: ./backend
|
||
dockerfile: Dockerfile.cn # 使用国内优化版本
|
||
# ... 其他配置保持不变
|
||
|
||
frontend:
|
||
build:
|
||
context: ./frontend
|
||
dockerfile: Dockerfile.cn # 使用国内优化版本
|
||
# ... 其他配置保持不变
|
||
```
|
||
|
||
### 方案三:手动拉取所需镜像
|
||
|
||
```bash
|
||
# 使用镜像加速器手动拉取所需的基础镜像
|
||
docker pull golang:1.24-bookworm
|
||
docker pull debian:bookworm-slim
|
||
docker pull node:20-alpine
|
||
docker pull nginx:1.27-alpine
|
||
|
||
# 然后再构建项目
|
||
docker compose up --build -d
|
||
```
|
||
|
||
### 方案四:使用代理(临时方案)
|
||
|
||
如果你有可用的代理服务器:
|
||
|
||
```bash
|
||
# 设置 Docker 客户端代理
|
||
export HTTP_PROXY="http://your-proxy:port"
|
||
export HTTPS_PROXY="http://your-proxy:port"
|
||
export NO_PROXY="localhost,127.0.0.1"
|
||
|
||
# 然后执行构建
|
||
docker compose up --build -d
|
||
|
||
# 构建完成后取消代理
|
||
unset HTTP_PROXY HTTPS_PROXY NO_PROXY
|
||
```
|
||
|
||
或者配置 Docker daemon 使用代理:
|
||
|
||
```bash
|
||
# 创建 systemd 配置目录
|
||
sudo mkdir -p /etc/systemd/system/docker.service.d
|
||
|
||
# 创建代理配置文件
|
||
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf
|
||
```
|
||
|
||
添加以下内容:
|
||
|
||
```ini
|
||
[Service]
|
||
Environment="HTTP_PROXY=http://your-proxy:port"
|
||
Environment="HTTPS_PROXY=http://your-proxy:port"
|
||
Environment="NO_PROXY=localhost,127.0.0.1"
|
||
```
|
||
|
||
然后重启 Docker:
|
||
|
||
```bash
|
||
sudo systemctl daemon-reload
|
||
sudo systemctl restart docker
|
||
```
|
||
|
||
## 推荐操作步骤
|
||
|
||
1. **首先尝试方案一**(配置镜像加速器)- 最简单且长期有效
|
||
2. 如果方案一不稳定,**使用方案三**(手动拉取镜像)
|
||
3. 如果以上都不行,**使用方案二**(国内优化 Dockerfile)
|
||
|
||
## 验证成功
|
||
|
||
配置完成后,执行以下命令验证:
|
||
|
||
```bash
|
||
# 查看 Docker 配置
|
||
docker info
|
||
|
||
# 测试拉取镜像速度
|
||
time docker pull alpine:latest
|
||
|
||
# 构建项目
|
||
cd /home/AIRouter
|
||
docker compose up --build -d
|
||
|
||
# 查看构建进度
|
||
docker compose logs -f
|
||
|
||
# 检查服务状态
|
||
docker compose ps
|
||
```
|
||
|
||
## 常见问题
|
||
|
||
### Q: 镜像加速器配置后仍然超时?
|
||
A: 尝试使用不同的镜像源,或者切换到方案二使用国内优化的 Dockerfile。
|
||
|
||
### Q: 某些镜像源不可用?
|
||
A: 镜像源可能会变化,可以尝试其他可用的源,或搜索最新的国内 Docker 镜像源。
|
||
|
||
### Q: 构建速度仍然很慢?
|
||
A: 考虑使用本地镜像缓存,或者在网络条件好的时候提前拉取所需镜像。
|
||
|
||
## 其他国内可用镜像源
|
||
|
||
- 阿里云:https://your-id.mirror.aliyuncs.com (需要注册获取专属地址)
|
||
- 腾讯云:https://mirror.ccs.tencentyun.com
|
||
- 南京大学:https://docker.nju.edu.cn
|
||
- 中国科技大学:https://docker.mirrors.ustc.edu.cn
|
||
- 网易:https://hub-mirror.c.163.com
|
||
- 百度云:https://mirror.baidubce.com
|