如何在Docker中配置Node.js服务器的hostname并实现外部访问
问题原因与解决方案
当你在Node.js服务器中指定监听127.0.0.1时,服务只会绑定容器内部的回环网络接口。Docker容器拥有独立的网络栈,宿主机的请求通过端口映射转发到容器时,是访问容器的外部网络接口(而非容器内部的回环),所以无法连接到只监听127.0.0.1的服务。另外,docker run的-h参数仅用于设置容器的主机名,和服务监听的网络接口没有关联,因此无法解决这个问题。
解决方法
修改Node.js服务器的监听地址为0.0.0.0,这样服务会监听容器内所有可用的网络接口,宿主机的端口映射就能正常把请求转发到服务上:
const http = require("http"); http .createServer(function (request, response) { response.end("Hello from 0.0.0.0 docker"); }) .listen(3000, "0.0.0.0");
重新构建镜像并运行容器:
docker build . -t test/server docker run -p 3000:3000 <containerId>
此时你就能通过宿主机的localhost:3000或127.0.0.1:3000正常访问容器内的服务了。
内容的提问来源于stack exchange,提问作者Gorilka
相关产品推荐
相关产品推荐

