记录docker部署
1、vmware创建Centos7虚拟机
2、安装 Docker
bash
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
先查看 docker 是否安装成功
bash
docker -v
如果能看到类似:说明 Docker 正常
bash
Docker version 24.x.x
3、安装 Docker Compose:
bash
yum install docker-compose-plugin
安装后直接用:
bash
docker compose version
4、阿里云百炼 API Key: 确保您已从 阿里云百炼控制台 申请了 API Key。
5、项目克隆
bash
git clone https://github.com/Snailclimb/interview-guide.git
cd interview-guide
说明 系统没有安装 Git 。在 CentOS7 上只需要安装 Git 即可使用 git clone
bash
yum install -y git
安装完成后验证:
bash
git --version
如果 GitHub 访问失败,用国内镜像克隆:
bash
git clone https://hub.fastgit.org/Snailclimb/interview-guide.git
如果出现:
Failed to connect to 2a03:2880:f130:83:face:b00c:0:25de: Network is unreachable
这里的地址 2a03:2880:... 是 IPv6 地址 。
说明你的 CentOS7 正在优先使用 IPv6,但你的服务器没有 IPv6 网络,所以所有 GitHub 相关连接都失败。
解决办法很简单,直接下载压缩包:
bash
https://codeload.github.com/Snailclimb/interview-guide/zip/refs/heads/master
服务器下载:
bash
curl -L https://codeload.github.com/Snailclimb/interview-guide/zip/refs/heads/master -o interview-guide.zip
解压:
bash
yum install -y unzip
unzip interview-guide.zip
6、.env 文件编辑
-
进入 vi 编辑器后,按 i 键进入插入模式 (Insert Mode)。
-
找到 AI_BAILIAN_API_KEY= 这一行,将 your_key_here 替换为您的阿里云百炼 API Key。
-
修改完成后,按 Esc 键退出插入模式。
-
输入 :wq (write and quit) 并按回车键保存并退出文件。
bash
cp .env.example .env
vi .env
7、构建并启动所有服务
bash
docker-compose up -d --build
或者docker compose up -d --build
如果有"-"运行不了,就把-去掉,后续的命令同样,因为我安装的是 Docker Compose V2,而不是旧版 docker-compose,从 Docker 20.10 以后官方推荐 V2
此命令执行后,Docker Compose 会自动完成以下操作:
-
拉取基础镜像: 例如 PostgreSQL、Redis、MinIO 等。
-
构建自定义镜像: 根据项目 app/Dockerfile 和 frontend/Dockerfile 构建后端和前端应用的 Docker 镜像。
-
创建并启动容器: 启动所有服务(包括后端、前端、数据库、缓存和对象存储)。
如果出现:
root@localhost interview-guide-master]# docker compose up -d --build [+] Running 4/4 ✘ postgres Error context canceled 15.1s ✘ redis Error Get "https://registry-1.docker.io/v2/": net/http: request canc... 15.1s ✘ minio Error context canceled 15.1s ✘ createbuckets Error context canceled 15.1s Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
本质是 Docker 拉取镜像失败, 说明 服务器访问 Docker Hub 超时,所以这些镜像都拉不下来
那么,配置 Docker 国内镜像加速
创建配置文件:
bash
mkdir -p /etc/docker
vi /etc/docker/daemon.json
写入下面内容:
bash
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://hub-mirror.c.163.com",
"https://mirror.ccs.tencentyun.com"
]
}
重启 Docker
bash
systemctl daemon-reexec
systemctl restart docker
检查配置是否生效:
bash
docker info
如果看到:
bash
Registry Mirrors:
https://docker.m.daocloud.io/
https://hub-mirror.c.163.com/
说明成功。
重新拉取镜像,回到项目目录:
bash
cd interview-guide-master
重新启动:
bash
docker compose up -d --build
8、服务访问和验证
由于是在服务器上部署,您需要使用服务器的 IP 地址来访问这些服务。
-
前端应用: http://服务器IP地址
-
后端 API: http://服务器IP地址:8080 (提供 Swagger/接口文档)
-
MinIO 控制台: http://服务器IP地址:9001 (默认账号 minioadmin ,密码 minioadmin )
-
MinIO API: 服务器IP地址:9000
-
PostgreSQL: 服务器IP地址:5432
-
Redis: 服务器IP地址:6379
上传简历一直显示"处理中",文件存储失败: The specified bucket does not exist (Service: S3, Status Code: 404, Request ID: 189D44D779C47800, Extended Request ID: dd9025bab4ad464b049177c95eb6ebf374d3b3fd1af9251148b658df7ac2e3e8)
-
说明你的程序在尝试上传文件到存储桶(bucket),但是存储服务找不到这个 bucket。
-
404并不是网络问题,而是存储桶名字错了或者桶根本没创建
访问:
bash
http://192.168.88.128:9001
登录:
账号: minioadmin
密码: minioadmin
创建 bucket
进入 MinIO 控制台:Create Bucket,叫interview-guide
如果你不确定,可以查:
bash
docker exec -it interview-app env | grep BUCKET
下一步是进行简历分析:分析过程中出现错误: 简历分析失败:简历分析失败:I/O error on POST request for "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions": Failed to resolve 'dashscope.aliyuncs.com', couldn't setup transport: [id: 0x9512eb62]
应用容器里的服务无法访问外网 DNS,所以调用 DashScope API 失败。
给 Docker Compose 指定外部 DNS
在 docker-compose.yml 的 interview-app 服务下添加:
bash
services:
interview-app:
...
dns:
- 8.8.8.8
- 114.114.114.114

dns 必须在 app: 内缩进正确,然后重启:
bash
docker compose down
docker compose up -d
java.net.UnknownHostException: Failed to resolve 'dashscope.aliyuncs.com'
Caused by: io.netty.channel.ChannelException: setsockopt() failed: Protocol not available
这其实不是普通 DNS 问题,而是 Netty 在容器里尝试使用 Linux 的 IPv6 socket 选项失败 。
在 CentOS7 + Docker + Java Netty 环境里非常常见。虽然你 curl 能访问,但 Java 的 Netty HTTP 客户端默认优先 IPv6 ,而你的系统 IPv6 没完全支持,所以:
bash
setsockopt() failed: Protocol not available
在 docker-compose.yml 的 app 服务 里加 JVM 参数,让 Java 强制使用 IPv4。
找到你这个位置:
bash
app:
build:
context: .
dockerfile: app/Dockerfile
然后在 environment 里加一行:
bash
JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true

然后重启容器
bash
docker compose down
docker compose up -d --build
9、验证服务是否正常运行:
查看 Docker 容器状态:
bash
docker compose ps
后端服务日志:
bash
docker compose logs -f app
检查前端服务日志 (如果需要):
bash
docker compose logs -f frontend