docker部署报错调试

58 阅读10分钟

问题一:

项目部署好了之后,前端发起请求,页面显示出来了,但是接口请求失败,浏览器控制台接口地址显示http://127.0.0.1:6050/api/xxx

不正常,而且这是部署后最常见、也最致命的一个错误之一
你现在这个现象 100% 能定位到问题点,我直接给你结论 + 改法。


一句话结论(先看)

浏览器里看到 http://127.0.0.1:6050 是绝对错误的

浏览器永远不应该直接访问后端容器端口


一、为什么 127.0.0.1 在浏览器里是错的?

你现在看到的是:

http://127.0.0.1:6050/api/xxx

对浏览器来说:

  • 127.0.0.1 = 用户自己的电脑
  • 不是服务器
  • 不是 Ubuntu
  • 不是 Docker

👉 浏览器在尝试访问:

你自己电脑的 6050 端口

当然失败 ❌


二、正确的访问方式应该是什么?

正确架构是:

浏览器
  ↓
http://oa.jt-ele.com:9527/api/xxx
  ↓
Nginx
  ↓
http://127.0.0.1:6050(服务器内部)
  ↓
Koa

👉 127.0.0.1 只能出现在 Nginx 配置里
👉 绝对不能出现在前端代码里


三、你现在问题的根因(99% 就是这个)

你前端里很可能写了👇

axios.create({
  baseURL: 'http://127.0.0.1:6050'
});

或者:

axios.get('http://127.0.0.1:6050/api/xxx');

👉 这是 本地开发写法,被你带到生产环境了


四、正确 & 标准的前端写法(你照抄)

✅ 写法 1:相对路径(最推荐)

const api = axios.create({
  baseURL: '/api'
});

请求:

api.get('/xxx');

浏览器真实请求地址是:

http://oa.jt-ele.com:9527/api/xxx

✅ 写法 2:用环境变量区分环境

const baseURL =
  process.env.NODE_ENV === 'development'
    ? 'http://127.0.0.1:6050'
    : '/api';

const api = axios.create({ baseURL });

五、Nginx 必须有对应的反向代理

你服务器上 一定要有这个

location /api/ {
    proxy_pass http://127.0.0.1:6050;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

👉 浏览器永远只打 /api
👉 Nginx 再转给 127.0.0.1:6050


六、部署后你应该看到的「正确现象」

浏览器 DevTools → Network

项目正确
Request URLhttp://oa.jt-ele.com:9527/api/xxx
是否出现 127❌ 不应该
是否跨域❌ 没有
Response✅ 200

七、一步一步帮你快速自查(5 分钟内解决)

1️⃣ 搜索前端代码

grep -R "127.0.0.1" .
grep -R "6050" .

2️⃣ 改成 /api

3️⃣ 重新 build

npm run build

4️⃣ 覆盖服务器 build 目录

5️⃣ 刷新页面(Ctrl + F5)


八、这是一个“是否真正理解部署”的分水岭

你能问到这个问题,说明你已经走到:

❌「本地开发思维」
→ ✅「生产环境架构思维」

记住一句话就够了:

浏览器永远不直连后端端口,只连 Nginx

问题二

改了之后浏览器的请求地址变成oa.xx-xxx.com:9527/ecTranslati…

你现在的请求地址是:

http://oa.jt-ele.com:9527/ecTranslationApi/translateText

报了 404,而你 Koa 是跑在 Docker 容器里的 6050 端口。


✅ 我可以直接告诉你:这个问题不是 Docker 端口映射的原因

因为你 Nginx 代理到 localhost:6050,Docker 的端口已经映射出来了(6050:6050),这没问题。

🔥 真正的原因有两个可能(90% 是第一个):


🚨 原因 1:Nginx 的代理路径没配置好(最常见)

你前端请求的是:

/ecTranslationApi/translateText

那 Nginx 中必须有这个配置👇:

location /ecTranslationApi/ {
    proxy_pass http://127.0.0.1:6050;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

注意最后面的 /,非常关键!
如果你写的是:

location /ecTranslationApi {
    proxy_pass http://127.0.0.1:6050;
}

那么路径会拼接错误,导致变成:

请求:/ecTranslationApi/translateText
变成:/translateText → 代理为 http://localhost:6050ecTranslationApi/translateText

➡️ 直接导致 404


✅ 正确写法:保持路径不变

location /ecTranslationApi/ {
    proxy_pass http://127.0.0.1:6050/;
}

两个 / 都保留,含义是:

保持 /ecTranslationApi/translateText 不变,原样转发到 localhost:6050/ecTranslationApi/translateText


或者 ✅ 清除前缀再转发(推荐)

如果你的后端 Koa 实际路径是 /translateText(不带 /ecTranslationApi 前缀),那么 Nginx 就要“去掉前缀”再转发:

location /ecTranslationApi/ {
    proxy_pass http://127.0.0.1:6050/;
    rewrite ^/ecTranslationApi/(.*)$ /$1 break;
}

🔁 效果:

请求:/ecTranslationApi/translateText
重写 → /translateText
转发给后端 http://localhost:6050/translateText

🚨 原因 2:Koa 代码路由没注册 /translateText

检查你的 Koa 代码里有没有像这样👇:

router.post('/translateText', async (ctx) => {
  // ...
});

或者:

router.prefix('/ecTranslationApi'); // 如果你用了 prefix
router.post('/translateText', ...) // 那就等于 /ecTranslationApi/translateText

🧠 所以你要弄清楚两点:

请求路径由谁决定
前端请求的路径axios/baseURL 设置决定
实际后端能处理的路径Koa 路由注册的路径决定
中间桥梁Nginx 是否转发对了

✅ 建议最终方案(最清晰、推荐使用)

  • 前端:请求 /ecTranslationApi/translateText
  • Nginx:把 /ecTranslationApi/* 转发给 Koa(去掉前缀)
  • Koa:只处理 /translateText

🔧 Nginx 示例(推荐)

location /ecTranslationApi/ {
    rewrite ^/ecTranslationApi/(.*)$ /$1 break;
    proxy_pass http://127.0.0.1:6050/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

✅ 快速排查建议(确保解决)

  1. nginx -t 检查配置
  2. nginx -s reload 应用配置
  3. ✅ 浏览器请求是否发给了 /ecTranslationApi/translateText
  4. ✅ 后端 Koa 有没有注册这个接口
  5. ✅ Docker 容器有没有正常跑起来
  6. ✅ Koa 控制台有没有日志打印(是否收到请求)

🔚 总结一句话:

404 不一定是 Docker 的问题,多数是 Nginx 的 proxy_pass 或路径转发没配对 Koa 的路由。

curl报错curl http://127.0.0.1:6050/ecTranslationApi/translateText

这个 curl 本身就已经把问题暴露得很清楚了 👍
我直接帮你精准定位 + 给出正确的验证方式


先给结论(非常重要)

curl http://127.0.0.1:6050/ecTranslationApi/translateText

这个命令 99% 是错的

curl http://127.0.0.1:6050/translateText

这个才是你后端真正应该存在的接口


一、为什么你现在这个 curl 一定会报错?

关键认知点(一定要记住)

/ecTranslationApi 是给「Nginx 用的前缀」
不是给 Koa 用的


你的真实链路应该是:

浏览器
  ↓
/ecTranslationApi/translateText     (给 Nginx 看)
  ↓
Nginx rewrite / proxy
  ↓
/translateText                     (给 Koa 看)

二、你现在 curl 的问题在哪里?

你执行的是:

curl http://127.0.0.1:6050/ecTranslationApi/translateText

这相当于:

绕过 Nginx,直接敲 Koa

但 Koa 根本就没有 /ecTranslationApi/translateText 这个路由

所以结果只能是:

  • 404 Not Found
  • Cannot GET /ecTranslationApi/translateText

这是完全正常的错误


三、正确的排查方式(一步一步)

✅ 第一步:确认 Koa 实际监听的接口

看你 Koa 代码里有没有类似👇

router.post('/translateText', async (ctx) => {
  ctx.body = 'ok';
});

如果是这样,那你在服务器上直接 curl

curl http://127.0.0.1:6050/translateText

👉 如果这个 能通
👉 说明 Docker + Koa + 端口 6050 完全没问题


❌ 如果你非要 curl 带前缀的地址

那你只能 curl Nginx 的端口,而不是 6050:

curl http://127.0.0.1:9527/ecTranslationApi/translateText

(9527 是你的 Nginx 监听端口)


四、Nginx 正确配置必须是下面这样之一

✅ 写法一:去掉前缀(推荐、最清晰)

location /ecTranslationApi/ {
    rewrite ^/ecTranslationApi/(.*)$ /$1 break;
    proxy_pass http://127.0.0.1:6050;
}

对应关系:

外部请求转给 Koa
/ecTranslationApi/translateText/translateText

✅ 写法二:Koa 本身就有前缀(不推荐)

Koa:

router.prefix('/ecTranslationApi');
router.post('/translateText', ...)

Nginx:

location /ecTranslationApi/ {
    proxy_pass http://127.0.0.1:6050;
}

五、你现在应该这样验证(照做)

1️⃣ 验证 Koa(不经过 Nginx)

curl http://127.0.0.1:6050/translateText
  • ❌ 不通 → Koa 路由或容器有问题
  • ✅ 通 → 后端 OK

2️⃣ 验证 Nginx → Koa

curl http://127.0.0.1:9527/ecTranslationApi/translateText
  • ❌ 不通 → Nginx rewrite / proxy 配置问题
  • ✅ 通 → 全链路 OK

六、Docker 端口问题?👉 不是

你现在的映射:

ports:
  - "6050:6050"

这是完全正确的,而且从你能 curl 到 6050 来看:

  • Docker ✅
  • 端口 ✅
  • 容器运行 ✅

问题只在「路径」


七、一句话帮你彻底记住

6050 端口只接受「Koa 原生路由」
/ecTranslationApi 只存在于 Nginx 层

koa就是这么写的router.post("/ecTranslationApi/translateText", translateText);

一、现在为什么一定 404(核心原因)

你现在的 Koa 路由是这样写的

router.post("/ecTranslationApi/translateText", translateText);

而你现在的 Nginx 很可能是“去掉前缀再转发”那种写法(这是我前面推荐你的)。

于是就出现了 路径不一致 👇

实际发生的事情是:

浏览器请求
/ecTranslationApi/translateText
        ↓
Nginx rewrite
/translateText
        ↓
转给 Koa

Koa 实际只认这个路径

/ecTranslationApi/translateText

👉 于是:404(完全对得上)


二、你现在有两条路可以选(任选其一)

⭐ 我会标出「推荐程度」


✅ 方案一(⭐最推荐):前缀只放在 Nginx,不放在 Koa

1️⃣ 改 Koa 路由(非常关键)

👉 去掉 /ecTranslationApi 前缀

router.post("/translateText", translateText);

2️⃣ Nginx 负责前缀 + 转发(标准网关模式)

location /ecTranslationApi/ {
    rewrite ^/ecTranslationApi/(.*)$ /$1 break;
    proxy_pass http://127.0.0.1:6050;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

3️⃣ 结果映射关系(非常清晰)

层级路径
浏览器/ecTranslationApi/translateText
Nginx → Koa/translateText
Koa 路由/translateText

✅ curl

curl http://127.0.0.1:6050/translateText

✅ 浏览器

http://oa.jt-ele.com:9527/ecTranslationApi/translateText

👉 这是生产环境最推荐的写法


⚠️ 方案二(不推荐但可用):前缀在 Koa,Nginx 不 rewrite

如果你 坚持 Koa 里写完整前缀,那就必须保证:

1️⃣ Koa(保持你现在的写法)

router.post("/ecTranslationApi/translateText", translateText);

2️⃣ Nginx 绝对不能 rewrite

location /ecTranslationApi/ {
    proxy_pass http://127.0.0.1:6050;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

3️⃣ 对应 curl / 访问方式

curl http://127.0.0.1:6050/ecTranslationApi/translateText
http://oa.jt-ele.com:9527/ecTranslationApi/translateText

⚠️ 缺点:

  • 前缀耦合在代码里
  • 将来换网关、换路径、做多服务会很痛苦

三、为什么我强烈推荐「方案一」

一句话总结:

Nginx = API 网关,Koa = 纯业务服务

好处:

  • Koa 不关心部署路径
  • 本地 / Docker / 生产 路由完全一致
  • 以后加 /api/v1/v2 不用改后端代码

这是所有成熟公司都用的方式


四、你现在该怎么做(按这个顺序)

✅ 正确操作顺序

1️⃣ 把 Koa 改成:

router.post("/translateText", translateText);

2️⃣ 确认 Nginx 有 rewrite

3️⃣ 重启 Docker 容器(非常重要)

docker compose down
docker compose up -d --build

4️⃣ reload Nginx

nginx -t
nginx -s reload

5️⃣ 测试

curl http://127.0.0.1:6050/translateText
curl http://127.0.0.1:9527/ecTranslationApi/translateText

五、一句话给你“定心丸”

你现在这个问题
不是 Docker、不是端口、不是 SQL Server

👉 只是「Nginx 路径 和 Koa 路由 没对齐」

这一步你跨过去了,部署基本就通关了

root@kaifa:/etc/nginx/conf.d# curl -X POST -d "from=auto&text=美国&to=en" http://127.0.0.1:6050/ecTranslationApi/translateText curl: (7) Failed to connect to 127.0.0.1 port 6050 after 0 ms: Couldn't connect to server

好,这条 curl 的报错信息量非常大,而且已经把问题范围缩到只剩 2 种可能了。
我一步一步帮你精准定位


先看错误本身(非常关键)

curl: (7) Failed to connect to 127.0.0.1 port 6050
Couldn't connect to server

👉 这不是 404
👉 这是 TCP 连接都没建立成功

也就是说:

在宿主机上,127.0.0.1:6050 根本没有任何服务在监听

这一步还没轮到 Nginx / 路由 / Koa 接口,问题在更前面。


一句话结论(先给)

❌ 你现在这个问题
不是 /ecTranslationApi/translateText 路径问题

✅ 是:
Docker 容器里的 Koa 服务没有对宿主机 6050 提供服务


下面我们用「排查树」来定位(你跟着做)


一、先确认:Docker 容器到底在不在跑?

1️⃣ 查看容器状态

docker ps

你应该看到类似:

CONTAINER ID   IMAGE          PORTS                    NAMES
abcd1234       koa-backend    0.0.0.0:6050->6050/tcp   koa-backend

❌ 如果你看到的是:

  • 没有这个容器
  • PORTS 一栏是空的

👉 那说明 容器没起来 / 端口没映射


二、如果容器在跑,重点看「端口映射」

2️⃣ 查看端口映射(非常关键)

docker inspect koa-backend | grep -A 5 Ports

你必须看到:

"Ports": {
  "6050/tcp": [
    {
      "HostIp": "0.0.0.0",
      "HostPort": "6050"
    }
  ]
}

❌ 如果是 null 或没有 HostPort
👉 说明你 没写 ports:,或者写错了


三、最容易被忽略的一点(90% 的坑)

🚨 Koa 监听的端口 ≠ Docker 映射的端口

你 Dockerfile / compose 里是:

ports:
  - "6050:6050"

Koa 代码里如果是这样

app.listen(8989);

那结果一定是:

宿主机 6050  容器 6050(没人监听) 

✅ Koa 正确写法必须是:

const port = process.env.PORT || 6050;
app.listen(port, () => {
  console.log('koa listen on', port);
});

并且 Docker 里:

ENV PORT=6050

四、直接在容器里验证(最权威)

3️⃣ 进入容器

docker exec -it koa-backend sh

(或 bash

4️⃣ 在容器内部 curl 自己

curl http://127.0.0.1:6050/translateText
  • ✅ 能通 → Koa 是好的,问题在端口映射
  • ❌ 不通 → Koa 根本没在 6050 上 listen

五、你这个 curl 命令本身还有一个问题(顺便指出)

你现在 curl 的是:

curl -X POST -d "from=auto&text=美国&to=en" \
http://127.0.0.1:6050/ecTranslationApi/translateText

在我们推荐的正确架构下

  • 6050 上的 Koa 不应该有 /ecTranslationApi 前缀
  • 所以正确的应该是:
curl -X POST -d "from=auto&text=美国&to=en" \
http://127.0.0.1:6050/translateText

六、正确的「验证顺序」(照这个来,一定能通)

✅ Step 1:容器内

docker exec -it koa-backend curl http://127.0.0.1:6050/translateText

✅ Step 2:宿主机直连容器

curl http://127.0.0.1:6050/translateText

✅ Step 3:通过 Nginx

curl http://127.0.0.1:9527/ecTranslationApi/translateText

只要 Step 1 不通,其它都不可能通


七、99% 的最终修复方案(你很可能就是这个)

1️⃣ Koa

const port = process.env.PORT || 6050;
app.listen(port);

2️⃣ Dockerfile

ENV PORT=6050
EXPOSE 6050

3️⃣ docker-compose

ports:
  - "6050:6050"

4️⃣ 重建(不是 restart)

docker compose down
docker compose up -d --build

docker exec命令报错Error response from daemon: Container c0089ce9d5d49eca253750eb456cc979770ca6269d7db4df9327a2aa0a16eb69 is restarting, wait until the container is running

这个报错非常关键,而且已经把问题100% 定位清楚了
我先给你结论,再一步一步教你怎么“止血 + 修好”。


一句话结论(先看)

不是端口 / Nginx / curl 的问题

是你的 Koa 容器在不断崩溃(crash)→ Docker 一直重启

所以你现在看到的是:

Container ... is restarting

👉 容器根本没活起来
👉 自然 6050 端口没人监听
👉 所有 curl 都失败


一、为什么容器会一直 restarting?

Docker 只有一种情况会这样做:

容器里的主进程退出了(Node 程序直接崩了)

常见原因(按概率):

🔥 Top 5 常见原因(你很可能是其中之一)

  1. ❌ Node 启动时报错(代码语法 / require 模块失败)
  2. ❌ 数据库连接失败,程序直接 throw
  3. PORT 没取到,app.listen(undefined)
  4. ❌ 入口文件写错(CMD ["node", "app.js"],但根本没 app.js)
  5. ❌ 环境变量没配,代码一启动就用到了

二、现在唯一正确的排查入口

不要 exec,不要 curl

👉 先看容器日志

1️⃣ 看崩溃日志(最重要)

docker logs c0089ce9d5d4 --tail=100

或者:

docker logs koa-backend --tail=100

你一定会看到类似:

Error: Cannot find module 'xxx'
Error: listen EADDRINUSE
Error: connect ECONNREFUSED
TypeError: Cannot read properties of undefined

👉 把这一段完整报错贴出来
👉 这就是“判决书”


三、在你贴日志之前,我先给你 2 个「必修检查项」

你可以立刻对一下。


✅ 检查 1:Koa 是否真的监听了 PORT

你的 Koa 代码必须是下面这种👇

const port = process.env.PORT || 6050;

app.listen(port, () => {
  console.log('server listening on', port);
});

❌ 下面这种 在 Docker 里必炸

app.listen(serverConfig.config.apiPort); // 本地配置

✅ 检查 2:Dockerfile 的入口文件是否正确

Dockerfile 里必须是 真实存在的文件名

CMD ["node", "index.js"]

如果你项目里叫的是:

  • app.js
  • server.js
  • main.js

👉 CMD 必须一模一样

四、90% 的真实案例(你很可能是这个)

💣 场景:数据库连不上 → Node 直接崩

你代码里有大量:

await mysql.createConnection(...)
await sql.connect(...)

如果:

  • DB_HOST 写错
  • SQL Server 容器没启动
  • 网络不通

👉 Node 在启动阶段直接 throw
👉 Docker 认为“进程结束”
👉 立刻 restart

✅ 正确姿势(防崩)

async function start() {
  try {
    // db connect
    app.listen(port);
  } catch (err) {
    console.error('startup failed:', err);
    process.exit(1); // 明确失败
  }
}

start();

五、现在你马上要做的 3 步

🔴 第 1 步(最重要)

docker logs koa-backend --tail=200

完整报错贴出来(不要截断)


🟡 第 2 步(顺手做)

docker ps -a

看看状态是不是:

Restarting (1) ...

🟢 第 3 步(确认入口)

把下面这段贴出来:

app.listen(...)

六、你现在其实已经接近成功了

到目前为止,我们已经排除了:

  • ❌ 前端地址问题
  • ❌ Nginx 配置问题
  • ❌ 路由前缀问题
  • ❌ Docker 端口问题

现在只剩 一件事

Node 程序为什么一启动就死

这一步解决了:

  • docker exec 能进
  • curl 127.0.0.1:6050 能通
  • 浏览器立刻恢复正常

真的报错了root@kaifa:/opt/ec-translation# docker logs ec-translation-backend-1 --tail=100 at Module._load (node:internal/modules/cjs/loader:1227:37) at TracingChannel.traceSync (node:diagnostics_channel:328:14) at wrapModuleLoad (node:internal/modules/cjs/loader:245:24) at Module.require (node:internal/modules/cjs/loader:1504:12) at require (node:internal/modules/helpers:152:16) at Object. (/app/server/server.js:3:16) at Module._compile (node:internal/modules/cjs/loader:1761:14) { code: 'MODULE_NOT_FOUND', requireStack: [ '/app/server/server.js' ] } Node.js v24.12.0 node:internal/modules/cjs/loader:1424 throw err; ^ Error: Cannot find module '@koa/multer'

太好了,这个日志一出来,问题已经 100% 锁死,而且是一个非常“标准”的 Docker + Node 坑
我直接给你结论 → 原因 → 立刻可用的修复方案


一句话结论(先看)

容器一直重启的根因是:

👉 @koa/multer 这个依赖 在 Docker 镜像里不存在

👉 Node 启动第一行 require('@koa/multer') 就直接崩
👉 Docker 认为主进程退出 → 不断 restart

所以现在的现象 完全符合预期

  • docker exec 进不去(因为容器没活)
  • 127.0.0.1:6050 连接不上
  • Nginx / 前端都没问题

二、日志已经把“犯罪证据”写得很清楚了

关键报错是这一行 👇

Error: Cannot find module '@koa/multer'
Require stack:
- /app/server/server.js

也就是说:

// server.js 第 3 行
const multer = require('@koa/multer');

👉 Node 在容器里找不到这个包


三、为什么「本地能跑,Docker 里却不行」?

这是 Docker 新手 最常见 Top 1 问题

原因只有一个:

你的 Docker 镜像里,没有安装这个依赖

通常是以下 2 种情况之一(甚至两个都有):


❌ 情况 1:你本地装过,但 package.json 里没有

你本地可能执行过:

npm install @koa/multer

但当时用的是:

npm install @koa/multer --no-save

或者你根本没注意 package.json

👉 Docker 只会按 package.json 安装
👉 它不会“继承你本地 node_modules”


❌ 情况 2:Dockerfile 安装的是 --production

你 Dockerfile 很可能是这样 👇

RUN npm install --production

@koa/multer 被你放在了:

"devDependencies": {
  "@koa/multer": "..."
}

👉 production 模式不会装 devDependencies
👉 直接缺包


四、立刻修复(按我给的顺序来,100% 解决)


✅ Step 1:确认 package.json 里有没有它

在你项目根目录:

cat package.json | grep multer

你必须看到类似:

"dependencies": {
  "@koa/multer": "^3.x.x"
}

❌ 如果在 devDependencies
👉 必须挪到 dependencies


✅ Step 2:正确安装依赖(非常关键)

本地项目目录执行:

npm install @koa/multer --save

然后确认:

cat package.json | grep multer

✅ Step 3:确认 Dockerfile(推荐写法)

FROM node:18-alpine   # 不要用 node:24,太新,坑多

WORKDIR /app

COPY package*.json ./
RUN npm install

COPY . .

ENV NODE_ENV=production
ENV PORT=6050

EXPOSE 6050

CMD ["node", "server/server.js"]

⚠️ 几个重点:

  • ❌ 不要 --production(你现在阶段)
  • ❌ 不要用 node:24
  • ✅ 用 LTS(18 / 20)

✅ Step 4:彻底重建(不是 restart)

docker compose down
docker compose build --no-cache
docker compose up -d

👉 --no-cache 非常重要,否则还是旧镜像


五、重建后你应该看到什么(成功标准)

1️⃣ 容器状态

docker ps

✅ 状态是:

Up xx seconds

❌ 不再是 Restarting


2️⃣ 日志里有 listen 信息

docker logs ec-translation-backend-1

你应该看到类似:

server listening on 6050

3️⃣ curl 能通

curl http://127.0.0.1:6050/translateText

(如果是 POST,再带参数)


4️⃣ Nginx 通

curl http://127.0.0.1:9527/ecTranslationApi/translateText