我用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代码是好的。
有什么建议吗??
2条答案
按热度按时间xuo3flqw1#
正如@pzaenger在HAPI服务器配置中提到的,将localhost更改为0.0.0.0。
83qze16e2#
或者干脆把它全部去掉。
你看,hapi会将服务器绑定到一个ip,但这个ip只能在运行时(容器的ip)或本地主机上知道。
你可以找到一种方法,有条件地将其分配给localhost或容器IP......但经过4个小时的调试,这对我来说太多了:)