我有一个运行的应用程序,它使用了Influxdb,chronograf(一个用于涌入的webUI管理界面)和grafana(一个用于涌入的图形UI界面)。
我的docker-compose fill将所有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
答案 0 :(得分:0)
在发布问题后约5分钟计算出来(特定于Grafana):将HTTP设置中的“访问”字段更改为“代理”(而不是“直接”)。
希望这可能会节省一些时间:
如果使用docker的net:“host”(或docker compose 3,network_mode:“host”),则可以使用直接设置,因为容器正在与主机共享网络。
但是,如果使用命名网络(例如在上面的撰写文件中),则可能需要在URL字符串中使用网络名称时使用代理。
答案 1 :(得分:0)
我认为你错了,从chronograf你可以只使用Influxdb访问Influxdb,因为两个服务都在同一个网络上,而Influxdb只是来自chronograf的DNS记录。您可以尝试使用此命令来验证端口是否在该主机上打开,如果它显示为open,则通信应该正常工作
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: