【问题标题】:Containerized NodeJS application on podman not reachablepodman 上的容器化 NodeJS 应用程序无法访问
【发布时间】:2020-09-06 22:10:30
【问题描述】:

我正在一个 pod 中运行一个 nodejs 应用程序(连同一个 mongo 容器) Nodejs 应用程序侦听我从容器中公开的端口 3000。 我已经在 pod 上发布了端口 3000。 容器成功启动(已验证日志),但我无法访问主机上的应用程序。当我从 pod 中卷曲到我的应用程序时,它可以工作。 容器运行 rootfull,操作系统:CentOS Linux 版本 8.0.1905(核心)。 我错过了什么?

curl http://localhost:3000
curl: (7) Failed to connect to localhost port 3000: No route to host
podman ps
CONTAINER ID  IMAGE                                                     COMMAND               CREATED         STATUS             PORTS                   NAMES
30da37306acf  registry.gitlab.com/xxx/switchboard:master  node main.js          34 minutes ago  Up 34 minutes ago  0.0.0.0:3000->3000/tcp  switchboard-app
acc08c71147b  docker.io/library/mongo:latest                            mongod                35 minutes ago  Up 35 minutes ago  0.0.0.0:3000->3000/tcp  switchboard-mongo
podman port switchboard-app
3000/tcp -> 0.0.0.0:3000
app.listen(3000, "0.0.0.0",function () {
  console.log('App is listening on port 3000!');
});
FROM node:13
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY /dist/apps/switchboard .
EXPOSE 3000
CMD [ "node", "main.js" ]

【问题讨论】:

    标签: node.js networking centos8 podman


    【解决方案1】:

    如果你想创建生产 docker build,你可以走另一种方式。在容器内执行 npm install 不是一个好主意,因为它太大了。首先运行npm run build,然后将构建的静态数据复制到docker容器中,使用nginx镜像创建。 所以你的 Dockerfile 应该是这样的:

    FROM nginx:1.13.0-alpine
    COPY build/*  /usr/share/nginx/html/
    

    还可以使用 docker run 正确指定暴露的端口。所以,如果你想暴露 3000,你的步骤是:

    cd /project/dir
    docker build -t switchboard-app .
    docker run -d -p 3000:80 --name switchboard-app switchboard-app
    

    【讨论】:

      猜你喜欢
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-13
      • 2021-05-11
      • 1970-01-01
      • 2019-11-05
      相关资源
      最近更新 更多