我有一个正在运行的应用程序,它使用influxdb,chronograf (用于influx的webUI管理界面)和grafana (用于influx的图形UI界面)。
我的docker-compose填充将所有3个都作为服务,并使用版本3:
version: '3'
services:
grafana:
image: grafana/grafana
container_name: "grafana"
volumes:
- ${GRAFANA_DATA_PATH}:/var/lib/grafana
ports:
- "3000:3000"
networks:
- influxdb
influxdb:
image: influxdb:1.4.3-alpine
container_name: "influxdb"
volumes:
- ${INFLUXDB_DATA_PATH}:/var/lib/influxdb
ports:
- "8086:8086"
networks:
- influxdb
chronograf:
image: chronograf:1.4.0-alpine
container_name: "chronograf"
volumes:
- ${CHRONOGRAF_DATA_PATH}:/var/lib/chronograf
ports:
- "8888:8888"
networks:
- influxdb
entrypoint:
- chronograf
- --influxdb-url=http://influxdb:8086
networks:
influxdb:一切似乎都很正常,除了当我登录grafana (在端口3000上),并连接一个数据源(在8086上运行的influxdb)时,它将无法工作,除非我使用服务器的公共IP地址。
这些都不起作用:
- "http://localhost:8086"
- "http://127.0.0.1:8086"
- "http://influxdb:8086"但是,这是可行的:
- "http://4.25.24.11:8086"这是一个问题,因为我不想公开端口8086公共端口-它只需要被其他容器访问即可。这曾经是使用“链接”来完成的,但现在已经被弃用了,我正在尝试在docker版本3中如何做到这一点。
有趣的是,chronograf在启动时可以毫不费力地连接到influxdb (正如您在入口点中所看到的):
--influxdb-url=http://influxdb:8086发布于 2018-02-03 06:00:19
在发布这个问题(这是Grafana特有的)大约5分钟后就解决了这个问题:将HTTP设置中的"access“字段更改为"proxy”(而不是"direct")。
希望这能节省一些人的时间:

如果使用docker的net:" host“(或docker compose 3,network_mode:"host"),您可以使用直接设置,因为容器与主机共享网络。
但是,如果使用命名网络(例如,在上面的合成文件中),则在URL字符串中使用网络名称时,可能需要使用代理。
发布于 2018-02-03 06:18:21
我认为你错了,在chronograf中,你可以只用influxdb访问influxdb,因为这两个服务都在同一个网络上,而influxdb只是来自chronograf的一个DNS记录。您可以尝试此命令来验证该主机上的端口是否打开,如果显示为打开,则通信应正常工作
docker-compose run chronograf nc influxdb 8086 -v我还会将depends_on添加到您的docker-compose.yml中,这样influxdb端口就不必公开了,我更愿意使用命令而不是入口点
version: '3'
services:
grafana:
image: grafana/grafana
depends_on: [influxdb]
ports:
- "3000:3000"
networks:
- influxdb
influxdb:
image: influxdb:1.4.3-alpine
networks:
- influxdb
chronograf:
image: chronograf:1.4.0-alpine
depends_on: [influxdb]
ports:
- "8888:8888"
networks:
- influxdb
command:
- chronograf
- --influxdb-url=http://influxdb:8086
networks:
influxdb:https://stackoverflow.com/questions/48591367
复制相似问题