我有一个运行nodejs和redis服务的应用程序。暴露的端口只有3000。这个应用程序是一个在postgresql中查询和存储数据的api。 这些服务在单个容器中运行。 我的问题是,当我检查系统日志时,我不断收到活动、就绪和启动错误,即使我已经配置了它们。 所以我想知道是否有人遇到过这个问题以及如何解决。 我启用了入口类型和 http 类型。 另一件值得一提的重要事情是,该应用程序每天将收到大约 150,000 个请求。 谢谢!
这是我目前的配置:
我的 Dockerfile
FROM node:21.4-bookworm
RUN apt-get update && \
apt-get install -y iputils-ping traceroute telnet dnsutils git nano htop redis-server && \
npm install -g pm2 && \
ln -fs /usr/share/zoneinfo/America/Santiago /etc/localtime && \
rm -rf /var/lib/apt/lists/*
RUN echo "user1:password" | chpasswd
RUN adduser -u 2000 user2 && \
echo "user2:password" | chpasswd
WORKDIR /usr/src/app/CUA-Tunel
COPY . .
EXPOSE 3000
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
我的入口点
#!/bin/bash
# Configuración DNS
echo search server01.domain.com > /etc/resolv.conf
echo search server02.domain.com >> /etc/resolv.conf
echo "nameserver xxx.xxx.xxx.xxx" >> /etc/resolv.conf
echo "nameserver xxx.xxx.xxx.xxx" >> /etc/resolv.conf
echo "maxclients 500000" >> /etc/redis/redis.conf
npm install
/etc/init.d/redis-server start
npx pm2 start ecosystem.config.js --no-daemon
我的作文
#version: '2.0'
services:
tunel-nodejs:
build:
context: .
dockerfile: Dockerfile
ports:
- "3000:3000"
据我所知,您已经在容器应用程序上部署了带有 Redis 和 PostgreSQL 的容器化 Node.js 应用程序,并且您遇到了活性、就绪性和启动探测方面的问题。 现在这可能是由于各种原因造成的。我建议您验证健康端点是否正常工作
Node.js 应用程序中的端点
/healthz
、/readyz
和 /startupz
在访问时应该返回 OK。
curl https://myapp.salmonsky-00bc5d91.eastus.azurecontainerapps.io/healthz
curl https://myapp.salmonsky-00bc5d91.eastus.azurecontainerapps.io/readyz
curl https://myapp.salmonsky-00bc5d91.eastus.azurecontainerapps.io/startupz
然后检查日志
由于您的应用程序每天处理 150,000 个请求,请考虑扩展
az containerapp update \
--name myapp \
--resource-group arkorg \
--min-replicas 2 \
--max-replicas 10
检查您的 Nodejs 应用程序是否已正确配置探测器
index.js
const express = require('express');
const redis = require('redis');
const { Client } = require('pg');
const app = express();
const port = 3000;
// Connect to Redis
const redisClient = redis.createClient({
host: process.env.REDIS_HOST || 'localhost',
port: 6379
});
redisClient.on('error', (err) => console.error('Redis Client Error', err));
// Connect to PostgreSQL
const pgClient = new Client({
user: process.env.PGUSER || 'psqladminun',
host: process.env.PGHOST || 'localhost',
database: process.env.PGDATABASE || 'postgres',
password: process.env.PGPASSWORD || 'abcdefg',
port: process.env.PGPORT || 5432,
});
pgClient.connect();
// Liveness Probe
app.get('/healthz', (req, res) => {
res.status(200).send('OK');
});
// Readiness Probe
app.get('/readyz', (req, res) => {
res.status(200).send('Ready');
});
// Startup Probe
app.get('/startupz', (req, res) => {
res.status(200).send('Started');
});
app.listen(port, () => {
console.log(`App running on port ${port}`);
});
package.json
{
"name": "myapp",
"version": "1.0.0",
"description": "Node.js app with Redis and PostgreSQL",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"express": "^4.17.1",
"pg": "^8.6.0",
"redis": "^3.1.2"
}
}
您也可以从 Azure 门户进行操作
参考-