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
实际运行的时候报错
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
然后还是报错
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