首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >docker compose network版本3-容器必须使用公网IP才能看到对方?

docker compose network版本3-容器必须使用公网IP才能看到对方?
EN

Stack Overflow用户
提问于 2018-02-03 05:52:23
回答 2查看 5.1K关注 0票数 1

我有一个正在运行的应用程序,它使用influxdb,chronograf (用于influx的webUI管理界面)和grafana (用于influx的图形UI界面)。

我的docker-compose填充将所有3个都作为服务,并使用版本3:

代码语言:javascript
复制
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地址。

这些都不起作用:

代码语言:javascript
复制
- "http://localhost:8086"
- "http://127.0.0.1:8086"
- "http://influxdb:8086"

但是,这是可行的:

代码语言:javascript
复制
- "http://4.25.24.11:8086"

这是一个问题,因为我不想公开端口8086公共端口-它只需要被其他容器访问即可。这曾经是使用“链接”来完成的,但现在已经被弃用了,我正在尝试在docker版本3中如何做到这一点。

有趣的是,chronograf在启动时可以毫不费力地连接到influxdb (正如您在入口点中所看到的):

代码语言:javascript
复制
--influxdb-url=http://influxdb:8086
EN

回答 2

Stack Overflow用户

发布于 2018-02-03 06:00:19

在发布这个问题(这是Grafana特有的)大约5分钟后就解决了这个问题:将HTTP设置中的"access“字段更改为"proxy”(而不是"direct")。

希望这能节省一些人的时间:

如果使用docker的net:" host“(或docker compose 3,network_mode:"host"),您可以使用直接设置,因为容器与主机共享网络。

但是,如果使用命名网络(例如,在上面的合成文件中),则在URL字符串中使用网络名称时,可能需要使用代理。

票数 1
EN

Stack Overflow用户

发布于 2018-02-03 06:18:21

我认为你错了,在chronograf中,你可以只用influxdb访问influxdb,因为这两个服务都在同一个网络上,而influxdb只是来自chronograf的一个DNS记录。您可以尝试此命令来验证该主机上的端口是否打开,如果显示为打开,则通信应正常工作

代码语言:javascript
复制
docker-compose run chronograf nc influxdb 8086 -v

我还会将depends_on添加到您的docker-compose.yml中,这样influxdb端口就不必公开了,我更愿意使用命令而不是入口点

代码语言:javascript
复制
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:
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48591367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档