如何从 Docker 容器访问主机上的 API?
How do I access an API on my host machine from a Docker container?
我有一个 docker-compose
可以启动 2 个 Docker 容器。一个是应用程序(port:8090
),另一个是数据库(port:5432
)。我还有一个 Windows 应用程序,它有一个 API 可通过 localhost:8002
访问。我想使用装有应用程序的容器从 localhost:8002
API 读取数据,然后将该数据移动到我另一个 Docker 容器中的数据库。
对于docker-compose
,我分别为数据库和应用程序容器映射了port 5432:5432
和port 8090:8090
。我已经测试了我的应用程序 non-dockerized 我调用 Windows API 然后将其写入 port:5432
并且它正常工作。
但是,在 Docker 化我的应用程序之后,localhost:8002
现在不再是我的 Docker 化应用程序的本地主机,现在无法访问。我想知道如何到达我的主机 localhost:8002
,点击 API,然后将该数据移动到我的另一个容器。
经过 16 个小时的鲜血、汗水和泪水。主要是眼泪,这是未来可能使用它的人的答案。
TL;DR 通过以下方式将您的本地 nat
网络暴露给 docker-compose
中的 docker 容器:
networks:
default:
external: true
name: nat
请注意,在 Windows 上,运行宁一个 docker network ls
应该给出如下内容:
NETWORK ID NAME DRIVER SCOPE
6b30a7dcf6e0 Default Switch ics local
26305680ad62 WSL ics local
b52f5e497eba nat nat local
4a4fd550398f none null local
docker-compose
只是将 docker 网络连接到您的主机网络(计算机重启后 auto-restart 容器也需要,但 off-topic)。
之后,我不得不 运行 一个 ipconfig
来找到与我的 nat
端口相对应的 IPv4
端口。在这里,可以有很多IPv4
个IP地址,找到那个Ethernet adapter vEthernet (nat)
.
然后,使用对应于 nat
网络的 IPv4 Address
用于本地机器上的任何应用程序 运行ning。
例如,我的申请 运行 localhost:8002
。在这里,我将主机更改为 http://172.31.160.1:8002
并且它起作用了。
我有一个 docker-compose
可以启动 2 个 Docker 容器。一个是应用程序(port:8090
),另一个是数据库(port:5432
)。我还有一个 Windows 应用程序,它有一个 API 可通过 localhost:8002
访问。我想使用装有应用程序的容器从 localhost:8002
API 读取数据,然后将该数据移动到我另一个 Docker 容器中的数据库。
对于docker-compose
,我分别为数据库和应用程序容器映射了port 5432:5432
和port 8090:8090
。我已经测试了我的应用程序 non-dockerized 我调用 Windows API 然后将其写入 port:5432
并且它正常工作。
但是,在 Docker 化我的应用程序之后,localhost:8002
现在不再是我的 Docker 化应用程序的本地主机,现在无法访问。我想知道如何到达我的主机 localhost:8002
,点击 API,然后将该数据移动到我的另一个容器。
经过 16 个小时的鲜血、汗水和泪水。主要是眼泪,这是未来可能使用它的人的答案。
TL;DR 通过以下方式将您的本地 nat
网络暴露给 docker-compose
中的 docker 容器:
networks:
default:
external: true
name: nat
请注意,在 Windows 上,运行宁一个 docker network ls
应该给出如下内容:
NETWORK ID NAME DRIVER SCOPE
6b30a7dcf6e0 Default Switch ics local
26305680ad62 WSL ics local
b52f5e497eba nat nat local
4a4fd550398f none null local
docker-compose
只是将 docker 网络连接到您的主机网络(计算机重启后 auto-restart 容器也需要,但 off-topic)。
之后,我不得不 运行 一个 ipconfig
来找到与我的 nat
端口相对应的 IPv4
端口。在这里,可以有很多IPv4
个IP地址,找到那个Ethernet adapter vEthernet (nat)
.
然后,使用对应于 nat
网络的 IPv4 Address
用于本地机器上的任何应用程序 运行ning。
例如,我的申请 运行 localhost:8002
。在这里,我将主机更改为 http://172.31.160.1:8002
并且它起作用了。