Docker应用商店部署NewAPI如何升级?踩坑实录:从 502 到容器无限重启,我是怎么解决的

AIGC项目教程8小时前发布 yizz
2,730 0 0
广告也精彩

最近我在宝塔面板升级一个叫 newapi 的 Docker 应用,本以为是简单的换个镜像,没想到一连串问题让我从容器网络、端口、Redis 到 .env 文件都踩了个遍……整理成经验贴,希望能帮到大家!

Docker应用商店部署NewAPI如何升级?踩坑实录:从 502 到容器无限重启,我是怎么解决的

🎯 背景

我原本在宝塔面板里跑了一个基于 Docker 的服务 newapi,一共用了三个容器:

  • newapi_ckb5-new-api-1:主程序容器
  • newapi_ckb5-redis-1:Redis 容器
  • newapi_ckb5-mysql-1:MySQL 容器

这套服务运行了好几个月,最近换了新镜像 calciumion/new-api:latest,想着点一下升级就完事了,结果是:没了……


❌ 升级后直接 502

最初在宝塔里点击了镜像升级 + 强制拉取镜像,系统提示容器更新失败、IP 分配异常,并回滚了旧容器。

🚩问题分析:

  • Docker 网络 baota_net 是我自己建的,但没有指定子网
  • 导致无法自动分配 IP、也无法识别容器名通信

✅解决方法:

手动删除旧网络,重新指定子网再创建:

docker network rm baota_net
docker network create --subnet=172.18.0.0/16 baota_net

然后把所有相关容器重新加进去:

docker network connect baota_net newapi_ckb5-redis-1
docker network connect baota_net newapi_ckb5-mysql-1
docker network connect baota_net newapi_ckb5-new-api-1

🧱 502 问题搞定后,容器又无限重启?

我还没缓过来,结果主程序容器一直“启动 ➜ 崩溃 ➜ 重启”,根本进不去,连 netstat 都查不了,提示:

Container is restarting, wait until the container is running

docker logs 一看:

[FATAL] Redis ping test failed: lookup redis on 127.0.0.11:53: no such host
[SYS] 未找到 .env 文件,使用默认环境变量

🚩问题分析:

  1. 程序里 Redis 默认地址是 redis://redis,但容器之间并不认识 redis
  2. 没有 .env 文件,也没设置环境变量,导致默认配置起作用
  3. 程序用不了 Redis 就直接挂了,容器不停重启

✅终极解决方案:

别用 .env 文件,直接在宝塔容器设置里添加环境变量最省事!

我在宝塔面板 → Docker → 编辑容器,添加了以下环境变量 👇

REDIS_CONN_STRING=redis://newapi_ckb5-redis-1:6379
SQL_DSN=root:我的密码@tcp(newapi_ckb5-mysql-1:3306)/new-api

保存后,容器瞬间不再重启,服务也正常跑起来了!


❓期间还遇到的小坑:

  • Redis 的 6379 端口 不需要映射,只要在同一 Docker 网络就能直接通信。
  • MySQL 容器没监听端口?执行 netstat -tlnp 发现压根没跑——结果是 Docker 容器启动慢了点,API 容器先连接失败了。解决:重启 MySQL 后再启动主容器。
  • 宝塔 Docker 面板每次“保存配置”=重建容器,如果参数错了会直接失败并回滚,容易让人摸不着头脑。

✅ 最终结果

成功升级 newapi 到新版镜像,所有容器稳定运行:

  • Nginx 反向代理 3000 端口到 HTTPS ✅
  • Redis、MySQL 正常通信 ✅
  • 日志清爽无报错 ✅

🎁 总结经验

问题 建议
自定义 Docker 网络 创建时要加 --subnet,否则容器名解析失败
容器间通信 用容器名 + 端口,比如 newapi_ckb5-redis-1:6379
配置管理 用宝塔“环境变量”比 .env 文件方便稳定
宝塔 Docker“保存”按钮 实际会重建容器,配置错误会还原

如果你也在宝塔上用 Docker,想升级服务,一定要注意:

不是简单换个镜像就完事,环境变量、网络、端口、服务依赖,样样都可能出问题!

© 版权声明
chatgpt4.0

相关文章

error: Content is protected !!