无法访问Docker容器中的Hapi服务器

vm0i2vca  于 2023-05-28  发布在  Docker
关注(0)|答案(2)|浏览(207)

我用Hapi构建了一个简单的NodeJS服务器,并尝试在Docker容器中运行它。
它在Docker中运行得很好,但我无法访问它(即使我已经完成了端口Map)。

const hapi = require("@hapi/hapi");

const startServer = async () => {
   const server = hapi.Server({
    host: "localhost",
    port: 5000,
  });

    server.route({
        method: 'GET',
        path: '/sample',
        handler: (request, h) => {

            return 'Hello World!';
        }
    });
     await server.start();
     console.log(`Server running on port ${server.settings.port}`);
 };

 startServer();

Docker文件如下:

FROM node:alpine

WORKDIR /usr/app

COPY ./package.json ./
RUN npm install

COPY ./ ./

CMD [ "npm","run","dev" ]

为了运行docker,我首先使用以下代码构建:

docker build .

然后我运行从上面的命令中得到的镜像来进行端口Map:

docker run -p 5000:5000 <image-name>

当我试图通过http://localhost:5000/sample甚至localhost:5000/sample上的postman访问它时,它一直说Couldn't connect to server,当我在chrome中打开时,它说同样的Can't display page
PS.当我在没有Docker容器的情况下像往常一样运行代码时,只需从我的终端使用npm run dev,代码运行得很好。
所以,我相信API代码是好的。
有什么建议吗??

xuo3flqw

xuo3flqw1#

正如@pzaenger在HAPI服务器配置中提到的,将localhost更改为0.0.0.0。

host: 'localhost' to host: '0.0.0.0',
83qze16e

83qze16e2#

或者干脆把它全部去掉。
你看,hapi会将服务器绑定到一个ip,但这个ip只能在运行时(容器的ip)或本地主机上知道。
你可以找到一种方法,有条件地将其分配给localhost或容器IP......但经过4个小时的调试,这对我来说太多了:)

相关问题