Docker 无法使用localhost,改成使用host.docker.internal来访问宿主机

作者
2025-09-15阅读 11

1、问题

我docker安装kutt,其中由于其需要访问postgresql数据库,所以初始是这样写的

docker run -d \
--name kutt-app \
-p 3000:3000 \

-e DB_CLIENT=pg \
-e DB_HOST=localhost \

--restart always \
kutt/kutt:v3.2.3

实际运行的时候报错

null

connect ECONNREFUSED 127.0.0.1:5432
Error: connect ECONNREFUSED 127.0.0.1:5432
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1634:16)

2、原因

使用localhsot访问的其实是容器里面,而不是宿主机的

3、使用host.docker.internal来实现

这里需要注意的是,如果直接改成host.docker.internal也是不行的

比如我这样写

docker run -d \
--name kutt-app \
-p 3000:3000 \

-e DB_CLIENT=pg \
-e DB_HOST=host.docker.internal \

--restart always \
kutt/kutt:v3.2.3

然后还是报错

null

getaddrinfo ENOTFOUND host.docker.internal
Error: getaddrinfo ENOTFOUND host.docker.internal
    at GetAddrInfoReqWrap.onlookupall [as oncomplete] (node:dns:120:26)

需要首先使用--add-host定义一下

完整的写法是这样的

docker run -d \
--name kutt-app \
-p 3000:3000 \
--add-host=host.docker.internal:host-gateway \

-e DB_CLIENT=pg \
-e DB_HOST=host.docker.internal \

--restart always \
kutt/kutt:v3.2.3



全部评论

头像
乌兔
前端开发
私信
获得点赞 445
文章被阅读 31,261