我正在Pod中运行Node.js应用程序(与mongo容器一起使用)Nodejs应用程序侦听我从容器公开的端口3000。我已经在Pod上发布了端口3000。容器成功启动(已验证日志),但是无法在主机上访问我的应用程序。当我从吊舱内卷曲到我的应用程序时,它可以工作。容器运行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" ]
如果要创建生产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