gpt4 book ai didi

node.js - Windows localhost无法访问Docker容器

转载 作者:行者123 更新时间:2023-12-02 19:35:03 27 4
gpt4 key购买 nike

我似乎无法访问任何正在运行的Docker容器。最新的hello-world3是使用端口8080的节点应用程序。我让节点应用程序通过process.env.PORT在该端口上侦听。我使用npm start脚本设置PORT=8080,并使用docker文件设置EXPOSE 8080。构建容器后,我指定一个端口。在这种情况下为8082,由docker run -p 8082:8080 hello-world3
从控制台查看此img,我应该可以通过转到localhost:8082看到我的应用程序响应,是吗?

enter image description here

我的 docker 文件

FROM jkilbride/node-npm-alpine:8

WORKDIR /src
COPY package.json .
RUN npm install
COPY . .
EXPOSE 8080

CMD ["npm","start"]

package.json:
{
"name": "service",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start":"set PORT=8080 && node index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"

}

index.js:
const http = require('http');
const server = http.createServer((req,res) => {
const data = {
'data': 'Hello World',
'hostname': require('os').hostname()
};
res.writeHead(200, {'Content-Type': 'application/json'})
res.end(JSON.stringify(data));
});

server.listen(process.env.PORT, (err) => {
if (err)
return console.log(err);
console.log('API is running on ' + process.env.PORT);
})

最佳答案

在Windows上,docker在vm中运行。因此,当您执行localhost:8082时,您正在调用主机的本地主机,即Windows,而不是在不同IP上运行的docker vm。可以将localhost调用转发给运行docker的vm的一种方法是使用port forwarding

我希望您已经安装了virtualbox。请按照以下步骤操作:

Open virtual box -> on left sidebar select vm running docker (which is named default) -> click on settings button on upper bar -> select network -> select advanced -> select port forwarding.



在这种情况下,您可以输入规则以将主机端口8082请求转发到8080 guest 端口。现在,当您执行localhost:8082时,它将请求转发到docker vm的8080,后者将转发到容器8080。

关于node.js - Windows localhost无法访问Docker容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46396177/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com