diff --git a/isolated/docker-compose.runtime.yml b/isolated/docker-compose.runtime.yml index 02d8d7c..2b2be1e 100644 --- a/isolated/docker-compose.runtime.yml +++ b/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 diff --git a/isolated/test/docker-compose.yml b/isolated/test/docker-compose.yml index c9b7dc9..3f82423 100644 --- a/isolated/test/docker-compose.yml +++ b/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 diff --git a/isolated/update.MD b/isolated/update.MD index fa6d9ba..a9e3a8d 100644 --- a/isolated/update.MD +++ b/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 服务: