gpt4 book ai didi

node.js - Fastify 无法在 Docker/Kubernetes 上运行

转载 作者:行者123 更新时间:2023-12-02 11:50:28 27 4
gpt4 key购买 nike

我有一个非常简单的应用程序,它返回“Hello World”字符串,它在本地运行良好。正如您将在下面的应用程序代码中看到的那样,它在端口 4000 上运行。 .当我创建 docker 镜像并运行容器时,我无法从 localhost:4000 访问它在我的机器上,但我可以看到 docker 到了 node index.js命令正确并且应用程序正在运行而没有任何错误。

我还尝试将它部署到 Kubernetes 集群,当我访问负载均衡器 ip 时,我得到 ERR_EMPTY_RESPONSE .通过 kubectl 检查此应用程序后我可以看到一切运行良好,图像已下载并且 pod 正在运行。

我很难理解我错过了什么以及为什么它只在本地有效。

NodeJS 应用程序

import fastify from 'fastify';

const server = fastify();

server.get('/', (_request, reply) => {
reply.status(200).send("Hello World");
});

server.listen(4000, error => {
if (error) {
process.exit(1);
}
});

Dockerfile
FROM node:14.2-alpine

WORKDIR /app

COPY package.json yarn.lock /app/

RUN yarn

COPY . .

EXPOSE 4000

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

Kubernetes list
---
# Load balancer
apiVersion: v1
kind: Service
metadata:
name: development-actions-lb
annotations:
service.beta.kubernetes.io/do-loadbalancer-name: "development-actions-lb"
service.beta.kubernetes.io/do-loadbalancer-algorithm: "round_robin"
spec:
type: LoadBalancer
selector:
app: development-actions
ports:
- name: http
protocol: TCP
port: 80
targetPort: 4000
---
# Actions deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: development-actions
spec:
replicas: 1
selector:
matchLabels:
app: development-actions
template:
metadata:
labels:
app: development-actions
spec:
containers:
- image: registry.digitalocean.com/myapp/my-image:latest
name: development-actions
ports:
- containerPort: 4000
protocol: TCP
imagePullSecrets:
- name: registry-myapp

最佳答案

首先,当我尝试您的代码时,我使用本地 docker 进行尝试,但行为是一样的,所以我希望它是因为 fastify 的事实。默认只收听localhost .

docker build -t development-actions:latest .
docker run -it -p 4000:4000 development-actions:latest

在 Docker 内部,您应该明确提及 '0.0.0.0'默认情况下 fastify仅在 localhost 127.0.0.1 上进行监听界面。要监听所有可用的 IPv4 接口(interface),应将示例修改为监听 0.0.0.0像这样我将其更改为以下内容:
const server = require('fastify')({ logger: true })

server.get('/', (_request, reply) => {
reply.status(200).send("Hello World");
});

server.listen(4000, '0.0.0.0', error => {
if (error) {
process.exit(1);
}
});

其余的应该是一样的。要在本地尝试,您可以使用:

引用:
  • https://www.fastify.io/docs/latest/Getting-Started/#your-first-server
  • 关于node.js - Fastify 无法在 Docker/Kubernetes 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61822353/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com