Podman上的容器化NodeJS应用程序无法访问

时间:2020-05-20 13:51:36

标签: node.js networking pod centos8 podman

我正在Pod中运行Node.js应用程序(与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" ]

1 个答案:

答案 0 :(得分:0)

如果要创建生产docker build,可以采用另一种方法。在容器内安装npm不是一个好主意,因为它将太大。首先运行npm run build,然后将构建的静态变量复制到使用nginx映像创建的docker容器中。 因此,您的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