Docker 容器向 http 发送请求
Docker container sending request to http
嗨,我有一个问题。
我正在使用 docker compose ver3 和 consul image 作为容器,在我的主机上我有一个简单的服务应该响应 http 请求并且它设置在端口 40001 上。所以现在我想做docker 通过 http 向此服务发送请求作为健康检查(换句话说,将请求从 docker 容器发送到主机上 运行ning 的服务)。
我的 docker compose for consul 很简单:
version: '3'
services:
consul:
image: consul:latest
command: consul agent -dev -log-level=warning -ui -client=0.0.0.0
hostname: consul
container_name: consul
ports:
- 8500:8500
- 8600:8600/udp
- 40000-41000:40000-41000
所以我启动了这个容器,主机上的服务在其中注册,主机上的服务的 http 健康检查地址是“http://localhost:40005//Health”。请求的间隔大约是 15 秒,所以我希望这样的请求到达服务并且服务将以 200 响应。
我还可以访问容器中的领事 UI。
主机上的好服务不会注册任何传入请求,但有趣的是当我 运行 独立领事时它工作正常(即我正在接受健康检查)。
所以我的问题是,这可能是容器无法与主机上的服务通信的问题。
例如,假设您在主机的端口 5555 上有一个服务 运行。
如果您想从 docker 容器与您的主机通信,以下是四种解决方案:
- 您在 linux 上:为了联系您的主机,您需要通过默认桥接网络 IP 联系它。通常,它被称为
docker0
,它的 IP 地址类似于 172.17.0.1
(您必须检查这些值)。
服务地址将是 http://172.17.0.1:5555
- 你在 Mac OS : 从 Docker 18.03 开始,建议使用特殊的 DNS 名称
host.docker.internal
(here is the doc).
服务地址将是 http://host.docker.internal:5555
.
- 您在 Windows 上:解决方案与 mac 的 Docker 相同(doc ).
服务地址将是 http://host.docker.internal:5555
.
- 全部 OS : 你有一个指向你的服务的静态 public IP 或 DNS 名称,你可以直接使用它。
服务地址将为 http://[host_public_ip_or_dns]:5555
.
嗨,我有一个问题。
我正在使用 docker compose ver3 和 consul image 作为容器,在我的主机上我有一个简单的服务应该响应 http 请求并且它设置在端口 40001 上。所以现在我想做docker 通过 http 向此服务发送请求作为健康检查(换句话说,将请求从 docker 容器发送到主机上 运行ning 的服务)。
我的 docker compose for consul 很简单:
version: '3'
services:
consul:
image: consul:latest
command: consul agent -dev -log-level=warning -ui -client=0.0.0.0
hostname: consul
container_name: consul
ports:
- 8500:8500
- 8600:8600/udp
- 40000-41000:40000-41000
所以我启动了这个容器,主机上的服务在其中注册,主机上的服务的 http 健康检查地址是“http://localhost:40005//Health”。请求的间隔大约是 15 秒,所以我希望这样的请求到达服务并且服务将以 200 响应。
我还可以访问容器中的领事 UI。
主机上的好服务不会注册任何传入请求,但有趣的是当我 运行 独立领事时它工作正常(即我正在接受健康检查)。
所以我的问题是,这可能是容器无法与主机上的服务通信的问题。
例如,假设您在主机的端口 5555 上有一个服务 运行。
如果您想从 docker 容器与您的主机通信,以下是四种解决方案:
- 您在 linux 上:为了联系您的主机,您需要通过默认桥接网络 IP 联系它。通常,它被称为
docker0
,它的 IP 地址类似于172.17.0.1
(您必须检查这些值)。
服务地址将是http://172.17.0.1:5555
- 你在 Mac OS : 从 Docker 18.03 开始,建议使用特殊的 DNS 名称
host.docker.internal
(here is the doc).
服务地址将是http://host.docker.internal:5555
. - 您在 Windows 上:解决方案与 mac 的 Docker 相同(doc ).
服务地址将是http://host.docker.internal:5555
. - 全部 OS : 你有一个指向你的服务的静态 public IP 或 DNS 名称,你可以直接使用它。
服务地址将为http://[host_public_ip_or_dns]:5555
.