leiyun пре 3 недеља
родитељ
комит
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: emp-pdf:
<<: *app-env <<: *app-env
image: ${IMAGE_NAMESPACE:-emp-test}/emp-pdf:${IMAGE_TAG:-latest} image: ${IMAGE_NAMESPACE:-emp-test}/emp-pdf:${IMAGE_TAG:-latest}
environment:
PORT: 3100
ports: ports:
- "127.0.0.1:${PDF_HOST_PORT:-3100}:3100" - "127.0.0.1:${PDF_HOST_PORT:-3100}:3100"
healthcheck: 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 interval: 10s
timeout: 5s timeout: 5s
retries: 30 retries: 30


+ 3
- 1
isolated/test/docker-compose.yml Прегледај датотеку

@@ -190,8 +190,10 @@ services:
emp-pdf: emp-pdf:
<<: *app-env <<: *app-env
image: ${IMAGE_NAMESPACE:-emp-test}/emp-pdf:${IMAGE_TAG:-latest} image: ${IMAGE_NAMESPACE:-emp-test}/emp-pdf:${IMAGE_TAG:-latest}
environment:
PORT: 3100
healthcheck: 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 interval: 10s
timeout: 5s timeout: 5s
retries: 30 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。 含义:`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 docker compose --env-file .env -f docker-compose.yml -p emp-test logs --tail=200 emp-pdf
``` ```


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


```bash ```bash
docker compose --env-file .env -f docker-compose.yml -p emp-test exec emp-pdf \ 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` 的访问: 在同一个 Docker 网络里检查 `emp-monitor` 到 `emp-pdf` 的访问:


```bash ```bash
docker compose --env-file .env -f docker-compose.yml -p emp-test exec emp-monitor \ 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 服务: 如果 `emp-pdf` 未运行或健康检查失败,先重启 PDF 服务:


Loading…
Откажи
Сачувај