leiyun 2 недель назад
Родитель
Сommit
351c8aafa8
3 измененных файлов: 10 добавлений и 6 удалений
  1. +3
    -1
      isolated/docker-compose.runtime.yml
  2. +3
    -1
      isolated/test/docker-compose.yml
  3. +4
    -4
      isolated/update.MD

+ 3
- 1
isolated/docker-compose.runtime.yml Просмотреть файл

@@ -204,10 +204,12 @@ services:
emp-pdf:
<<: *app-env
image: ${IMAGE_NAMESPACE:-emp-test}/emp-pdf:${IMAGE_TAG:-latest}
environment:
PORT: 3100
ports:
- "127.0.0.1:${PDF_HOST_PORT:-3100}:3100"
healthcheck:
test: ["CMD-SHELL", "node -e \"require('http').get('http://127.0.0.1:3100/health', r => process.exit(r.statusCode === 200 ? 0 : 1)).on('error', () => process.exit(1))\""]
test: ["CMD-SHELL", "node -e \"require('http').get('http://127.0.0.1:3100/pdf', r => { r.resume(); process.exit(r.statusCode < 500 ? 0 : 1) }).on('error', () => process.exit(1))\""]
interval: 10s
timeout: 5s
retries: 30


+ 3
- 1
isolated/test/docker-compose.yml Просмотреть файл

@@ -190,8 +190,10 @@ services:
emp-pdf:
<<: *app-env
image: ${IMAGE_NAMESPACE:-emp-test}/emp-pdf:${IMAGE_TAG:-latest}
environment:
PORT: 3100
healthcheck:
test: ["CMD-SHELL", "node -e \"require('http').get('http://127.0.0.1:3100/health', r => process.exit(r.statusCode === 200 ? 0 : 1)).on('error', () => process.exit(1))\""]
test: ["CMD-SHELL", "node -e \"require('http').get('http://127.0.0.1:3100/pdf', r => { r.resume(); process.exit(r.statusCode < 500 ? 0 : 1) }).on('error', () => process.exit(1))\""]
interval: 10s
timeout: 5s
retries: 30


+ 4
- 4
isolated/update.MD Просмотреть файл

@@ -159,7 +159,7 @@ PDF导出失败: I/O error on GET request for "http://emp-pdf:3100/pdf": Connect

含义:`emp-monitor` 已经访问到 Docker 内网地址 `emp-pdf:3100`,但 PDF 服务端口没有进程监听,常见原因是 `emp-pdf` 容器未启动、启动后退出、正在重启,或 Node 服务未正常监听 3100。

新版 `docker-compose.yml` 已给 `emp-pdf` 增加 `/health` 健康检查,并让 `emp-monitor` 等待 `emp-pdf` 健康后再启动。若服务器仍使用旧 compose,需要先同步新的 `docker-compose.yml` 或按下面命令手动重启 PDF 服务。
新版 `docker-compose.yml` 已给 `emp-pdf` 增加健康检查,并让 `emp-monitor` 等待 `emp-pdf` 可访问后再启动。健康检查访问 `/pdf`,400 也算通过,因为不带 url 参数时返回 400 代表服务已正常监听。若服务器仍使用旧 compose,需要先同步新的 `docker-compose.yml` 或按下面命令手动重启 PDF 服务。

先看容器状态:

@@ -174,18 +174,18 @@ docker compose --env-file .env -f docker-compose.yml -p emp-test ps emp-pdf emp-
docker compose --env-file .env -f docker-compose.yml -p emp-test logs --tail=200 emp-pdf
```

在 PDF 容器内检查健康接口
在 PDF 容器内检查 PDF 服务是否监听

```bash
docker compose --env-file .env -f docker-compose.yml -p emp-test exec emp-pdf \
node -e "require('http').get('http://127.0.0.1:3100/health', r => { console.log(r.statusCode); r.pipe(process.stdout) }).on('error', e => { console.error(e.message); process.exit(1) })"
node -e "require('http').get('http://127.0.0.1:3100/pdf', r => { console.log(r.statusCode); r.resume(); process.exit(r.statusCode < 500 ? 0 : 1) }).on('error', e => { console.error(e.message); process.exit(1) })"
```

在同一个 Docker 网络里检查 `emp-monitor` 到 `emp-pdf` 的访问:

```bash
docker compose --env-file .env -f docker-compose.yml -p emp-test exec emp-monitor \
sh -lc "curl -sS http://emp-pdf:3100/health || wget -qO- http://emp-pdf:3100/health"
sh -lc "curl -i http://emp-pdf:3100/pdf || wget -S -O- http://emp-pdf:3100/pdf"
```

如果 `emp-pdf` 未运行或健康检查失败,先重启 PDF 服务:


Загрузка…
Отмена
Сохранить