docker撰写网络版本3 - 除非使用公共IP,否则容器无法看到对方?

时间:2018-02-02 21:52:23

标签: docker networking localhost docker-compose influxdb

我有一个运行的应用程序,它使用了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

2 个答案:

答案 0 :(得分:0)

在发布问题后约5分钟计算出来(特定于Grafana):将HTTP设置中的“访问”字段更改为“代理”(而不是“直接”)。

希望这可能会节省一些时间:

enter image description here

如果使用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: