如何从 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】:
将容器放入网络“主机”以通过localhost
或127.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 数据库