发现一个好东西!爪子云给GitHub用户每月发5美元免费额度,正好把我写的SpringBoot项目搬到云上试试水。下面是完整的操作过程,从搭环境到填坑,再到把项目推上去,一步一步都写清楚啦~
一、前期准备:先整个Docker环境试试水
部署项目得先有Docker环境,第一步先去Docker官网下安装包就行。

我用的是Windows 11电脑,虽然早有耳闻Windows对Docker的适配不如Mac丝滑,但现在WSL 2都出好久了,应该能用吧?先试着在Windows上直接装装看~
踩坑1:Windows 11虚拟化开不了,Docker装不上!
结果刚装就翻车了,系统直接提示"虚拟平台未开启",安装失败😭。

一波三折的解决尝试:
- 先按Win+R打开运行框,输入optionalfestures.exe打开"Windows功能"窗口,勾选Hyper-V和"虚拟机平台"这两个选项保存。结果坑来了------"虚拟机平台"怎么勾都勾不上,关掉再打开还是没选中😓。

- 换个思路,用管理员身份打开PowerShell,试着用命令开,结果还是失败...

- 进BIOS看看,发现"Secure Virtual Machine Mode"(虚拟化模式)本来就是开着的;
- 怀疑是安卓模拟器占了资源,把所有模拟器都卸载了,问题还是没解决;
- 又试着用系统修复命令查问题,结果啥问题都没查到:
bash
# 扫描并修复系统受损文件
sfc /scannow
# 修复DISM组件缓存,解决系统组件异常问题
DISM /Online /Cleanup-Image /RestoreHealth
- 最后想更更新WSL试试,结果下载的安装包都打不开...

试了这么多办法都不行,放弃Windows了!直接用VMware装个Ubuntu虚拟机,在Linux环境里搞Docker部署~
二、Ubuntu虚拟机环境搭建:这次总该顺利了吧
步骤1:Ubuntu初始化配置
虚拟机装完Ubuntu,先更更新软件包,再装个vm-tools(不然复制命令、传文件都麻烦),命令直接抄下面的:
bash
# 更新apt包索引,获取最新软件信息
sudo apt-get update
# 升级已装的软件包,-y自动确认,不用手动点
sudo apt upgrade -y
# 装增强版VMware工具,支持复制粘贴、文件共享
sudo apt install open-vm-tools-desktop -y
# 重启虚拟机,让工具生效
sudo reboot
步骤2:在Ubuntu里装Docker Engine
直接用Docker官方的APT仓库装,这样版本最新,也不容易出依赖问题,跟着步骤来就行。
子步骤2.1:先配置Docker的APT仓库
- 先更新下apt索引,再装几个依赖包(让apt能通过HTTPS装软件):
bash
# 更新apt包索引
sudo apt-get update
# 装三个必要依赖:验证HTTPS证书、网络请求、密钥管理
sudo apt-get install -y ca-certificates curl gnupg
- 添加Docker官方的GPG密钥(保证装的软件是正版的,没被篡改):
bash
# 创建存放APT密钥的目录,设置好权限
sudo install -m 0755 -d /etc/apt/keyrings
# 下载Docker官方密钥,转成二进制格式存好
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 给所有用户读密钥的权限
sudo chmod a+r /etc/apt/keyrings/docker.gpg
- 配置Docker仓库(注意:noble是Ubuntu 24.04的代号,你装的是其他版本就对应改一下):
bash
# 把Docker仓库添加到APT源列表里
# arch=$(dpkg --print-architecture):自动识别系统架构(比如amd64、arm64)
# $(. /etc/os-release && echo "$VERSION_CODENAME"):自动识别Ubuntu版本代号
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
子步骤2.2:安装Docker核心组件
仓库配置好,就可以装Docker主程序、容器运行时这些核心东西了:
bash
# 再更一次apt索引,确保能拿到Docker最新的软件信息
sudo apt-get update
# 一次性装完核心组件:Docker引擎、命令行工具、容器运行时、构建插件、编排工具
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
子步骤2.3:验证下Docker装没装好
跑个官方的hello-world镜像试试水,能跑起来就没问题:
bash
# 拉取hello-world测试镜像并运行
sudo docker run hello-world
如果看到"Hello from Docker!"这句话,说明Docker装好了,能正常用~
(可选)不用每次都输sudo:配置非root用户运行Docker
默认用Docker得加sudo,有点麻烦,配置一下让普通用户也能直接用:
bash
# 创建docker用户组(如果已经有了就忽略)
sudo groupadd docker
# 把当前用户加入docker组($USER就是你当前登录的用户名)
sudo usermod -aG docker $USER
# 刷新用户组配置,不用注销重新登录就能生效
newgrp docker
# 再试一次,这次不用输sudo了
docker run hello-world
三、SpringBoot项目Docker打包+推送
步骤1:把项目传到虚拟机里
把本地的SpringBoot项目复制到Ubuntu虚拟机里,然后进入项目根目录(就是有Dockerfile的那个文件夹),打开终端准备操作。
步骤2:构建Docker镜像
bash
# 构建Docker镜像
# -t 项目名:latest:给镜像起个名,latest表示最新版本
# .:指定Dockerfile在当前目录
docker build -t 项目名:latest .
步骤3:本地先跑起来试试
bash
# 后台运行容器
# -d:后台跑,不占终端
# --name 项目名:给容器起个唯一的名字
# -p 主机端口:容器端口:端口映射,把虚拟机的端口指向容器里的项目端口
# -e "SPRING_PROFILES_ACTIVE=prod":指定用prod环境配置
docker run -d --name 项目名 -p 主机端口:容器端口 -e "SPRING_PROFILES_ACTIVE=prod" 项目名:latest
步骤4:推到Docker Hub,方便爪子云拉取
得先把镜像推到Docker Hub(就是docker.io),爪子云才能拉取部署。按下面步骤来:
- 先登录你的Docker Hub账号:
bash
# 登录Docker Hub,把"用户名"改成你自己的账号
docker login -u 用户名
- 去Docker Hub官网建个私有仓库(存自己的项目镜像,别公开了);
- 给本地镜像改个标签,要符合Docker Hub的格式(用户名/仓库名:版本):
bash
# 给本地镜像重命名,适配Docker Hub推送格式
docker tag 项目名 用户名/项目名:latest
- 最后把镜像推上去:
bash
# 推送镜像到Docker Hub的私有仓库
docker push 用户名/项目名:latest
四、部署必踩的坑!附解决方案
踩坑2:构建镜像时提示"failed to do request,connect: connection refused"
问题原因:
Docker默认从国外仓库拉镜像,国内网不好连,所以拉不下来,构建就卡住了。
解决方案:配置国内镜像源加速
bash
# 用nano打开Docker配置文件(没有就自动创建)
nano /etc/docker/daemon.json
# 粘贴下面的国内镜像源配置(Ctrl+O保存,Ctrl+X退出)
{
"registry-mirrors": [
"https://hub-mirror.c.163.com", # 网易镜像源
"https://docker.m.daocloud.io", # DaoCloud镜像源
"https://docker.nju.edu.cn" # 南京大学镜像源
]
}
# 重新加载配置
systemctl daemon-reload
# 重启Docker,让配置生效
systemctl restart docker
配置完再跑docker build,速度会快很多!如果还是慢,就再找个其他国内收费镜像源试试。
踩坑3:推送镜像时提示"failed to do request,connect: connection refused"
问题原因:
推镜像到Docker Hub要连国外服务器,国内网直接连不上;而且镜像只能用docker push推,不能在官网传。
解决方案:用代理打通网络
- 把VMware的网络设为桥接模式,让虚拟机和主机在同一个局域网;
- 在主机上打开代理工具,开启局域网共享,记一下主机的局域网IP(比如192.168.1.100);
- 在Ubuntu里配置网络代理,指向主机的代理地址;
- 关键一步:给Docker也配置代理:
bash
# 编辑Docker配置文件
nano /etc/docker/daemon.json
# 添加代理配置(把127.0.0.1:7890改成你的代理地址和端口)
{
"proxies": {
"http-proxy": "http://127.0.0.1:7890",
"https-proxy": "http://127.0.0.1:7890"
}
}
# 重新加载配置并重启Docker
systemctl daemon-reload
systemctl restart docker
配置完可以在Ubuntu里直接打开浏览器或者用curl命令测试一下就没问题了。
踩坑4:项目部署后连不上线上数据库
问题原因:
阿里云、腾讯云这些线上数据库都开了IP白名单,只有白名单里的IP才能连。爪子云服务器的IP没加进去,自然连不上。
解决方案:把爪子云IP加到数据库白名单
- 先在爪子云的Terminal里查一下服务器的公网IP:
bash
# 查询当前服务器的公网IP
curl ip.sb
- 登录你的数据库管理控制台,找到"IP白名单"设置,把查到的爪子云IP加进去; 3. 保存配置后,重启一下项目容器,等白名单生效,就能正常连数据库啦。
五、后续优化:前后端都部署好,网站就能跑啦
后端部署到爪子云后,前端项目可以放到GitHub私有仓库里,用Vercel或者Render这些平台,一键自动部署超方便。前后端都弄好,你的网站就能在线访问啦~

六、安全建议
通过部署平台自带的环境变量注入敏感信息,而不是application.yml 