如何从 docker 容器访问 localhost? [复制]

Posted

技术标签:

【中文标题】如何从 docker 容器访问 localhost? [复制]【英文标题】:How to reach localhost from docker container? [duplicate] 【发布时间】:2022-01-09 12:14:31 【问题描述】:

我有一个在 docker 容器中运行的 dotnet API。

我想通过这个 API 访问执行容器的本地主机上的 PostgreSQL 数据库。在 Windows 上,我使用 host.docker.internal 运行相同的应用程序连接到 localhost 数据库,但在 linux 上它不起作用。

我的连接字符串是这样的:

"Server=host.docker.internal;Port=5432;Database=DbName;User Id=DbUser;Password=MyPassword;"

我尝试通过添加 p --add-host=host.docker.internal:host-gateway 来制作 docker run,但它也不起作用。

我使用pg_isready 测试了我的 PostgreSQL 连接,如下所示。我的连接正常:

pg_isready -d dbname -h myHost -p 5432 -U dbUserName

我错过了什么?

【问题讨论】:

嗨! doesn't work 描述性不够。你得到一个错误,超时?你的数据库绑定到哪个ip?你怎么连接?您是否认为这是没有发生的名称解析或连接被拒绝?您是否尝试过通过代码连接以外的方式进行连接,例如从容器 ping host.docker.internal? 【参考方案1】:

将容器放入网络“主机”以通过localhost127.0.0.1 访问服务

docker run --network="host"

或运行桥接网络(默认)并通过 IP 地址访问主机:

docker network inspect <name>
"IPAM": 
            "Driver": "default",
            "Options": ,
            "Config": [
                
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1" <--- host IP
"Containers": 
            "048a..": 
                "Name": "container",
                "EndpointID": "81de..",
                "MacAddress": "02:42:..",
                "IPv4Address": "172.18.0.5/16", <-- container IP
                "IPv6Address": ""

【讨论】:

【参考方案2】:

--add-host=host.docker.internal:host-gateway,但是也没用。

在这种情况下,您可以使用docker run --add-host mypgserver:$(hostname -I | awk 'print $1') ...

你的连接字符串:

"Server=mypgserver;Port=5432;Database=DbName;User Id=DbUser;Password=MyPassword;"

此方法避免使用--network="host",如果不小心会导致端口冲突。

【讨论】:

以上是关于如何从 docker 容器访问 localhost? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 nginx docker 容器访问 localhost 上的服务器?

如何仅将 Docker 容器端口公开给 localhost,以便也可以通过 ssh 隧道访问它?

如何从 docker 容器向 localhost 发出请求?

如何从 docker 容器中的 python 脚本连接到 localhost 上的 mysql 数据库

无法从我的 Docker 容器内部连接到主机的 localhost

无法从我的本地主机访问 docker 上的 apache