【发布时间】:2021-11-23 09:52:17
【问题描述】:
我尝试按照来自 nginx 的请求连接到 linux 主机上的端口 9100(节点导出器)。
这是我的 docker-compose.yml 版本:'3.3'
services:
nginx:
image: nginx:1.21.4-perl
ports:
- 80:80
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
extra_hosts:
- 'host.docker.internal:10.187.1.52'
这是我的 nginx.conf
worker_processes auto;
http {
listen 80;
server_name localhost;
resolver 127.0.0.11 ipv6=off;
location ~ ^/node(/?.*) {
proxy_pass http://host.docker.internal:9100$1;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_read_timeout 300s;
}
}
这是我的 docker 版本
docker version
Client: Docker Engine - Community
Version: 20.10.10
API version: 1.41
Go version: go1.16.9
Git commit: b485636
Built: Mon Oct 25 07:44:50 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
我在端口 9100 上为 Node Exporter 做反向代理。它在 linux 主机上运行。 当我将 ip-address ("10.187.1.52") 直接放入 nginx.cnf 时效果很好。 但是,当我尝试将主机名用作“host.docker.internal”时它会失败。 我也尝试在 docker-compose.yml 的“extra_hosts”部分定义它,但结果仍然失败。我得到了同样的错误'[error] 24#24: *1 no resolver defined to resolve host.docker.internal, client: 10.186.110.106, server: localhost, request: "GET /node/metrics HTTP/1.1"'
你能给我一些解决这个问题的建议吗?
注意!!我正在创建一个在 GitHub 上使用负载测试进行监控的示例。这是我项目中的快照代码,因此您可以在 link 上看到完整的源代码。
【问题讨论】:
-
你试过
http://appcadvisor:8080吗? -
@Robert-JanKuyper 哦,主机名应该是“appcadvisor”。我编辑了主线程。效果很好。
-
很好,现在可以使用了吗?执行
docker-compose up --force-recreate以应用更改。 -
@Robert-JanKuyper 抱歉,我想做 nginx 和节点导出器之间的反向代理。 Node Exporter 正在使用端口 9100 的主机上运行。抱歉,我应该删除 cadvisor 以使问题更关注如何连接到主机。
标签: docker nginx docker-compose prometheus-node-exporter