前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ChirpStack 学习笔记 2.8.1 ChirpStack 容器连接本机 InfluxDB 容器的一个典型问题处理

ChirpStack 学习笔记 2.8.1 ChirpStack 容器连接本机 InfluxDB 容器的一个典型问题处理

作者头像
twowinter
发布2020-04-17 17:44:14
1.1K0
发布2020-04-17 17:44:14
举报
文章被收录于专栏:twowintertwowinter

前言

2.8 应用集成 InfluxDB 笔记中有记录一个无法连接 influxdb 容器的问题,这篇笔记做个深入分析。

小能手最近在学习 ChirpStack 项目,应该是最有影响力的 LoRaWAN 服务器开源项目。它组件丰富,代码可读性强,是个很好的学习资料。更多学习笔记,可点此查看

1 问题描述

代码语言:javascript
复制
appserver_1      | time="2020-02-07T10:24:34Z" level=error msg="integration/multi: integration *influxdb.Integration error" error="sending measurements error: http request error: Post http://localhost:8086/write?db=db0&precision=ms&rp=: dial tcp 127.0.0.1:8086: connect: connection refused"

我的主机上已经运行了 ChirpStack 的容器,根据应用需要又再开了一个 InfluxDB 容器,当在 chirpstack 的页面中配置 localhost:8086 为 InfluxDB 的连接地址时,提示 connection refused。

2 原因分析

docker 是一个虚拟环境,127.0.0.1 和 localhost 指的是虚拟环境内部,而不是外部宿主机,所以无法这样访问.

2.1 容器网络分析

代码语言:javascript
复制
# docker network ls
NETWORK ID          NAME                        DRIVER              SCOPE
02231307198a        bridge                      bridge              local
81b1d878dd80        host                        host                local
5284403f2094        lora-app-server_default     bridge              local
8de8416ca11a        lora_default                bridge              local
d4389dfb8f38        loraserver-docker_default   bridge              local
49d4a4343b5e        lorawan-stack-dev_default   bridge              local
194a422ad895        none                        null                local
lora-app-server_default
代码语言:javascript
复制
# docker network inspect lora-app-server_default
[
    {
        "Name": "lora-app-server_default",
        "Id": "5284403f20943bcca33e6fb7482aa1c5e714bbf05a66c5712500f35c901f1a5d",
        "Created": "2019-10-29T12:37:30.514317558+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "192.168.16.0/20",
                    "Gateway": "192.168.16.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "46e4075d8376bd54b2d59d330a2f9924a0dff32e080f53b26200ce7845a6f65c": {
                "Name": "lora-app-server_mosquitto_1",
                "EndpointID": "5677bc3efacb3454d2e70d490e8c6d2bc75469080d985645ceda500940311944",
                "MacAddress": "02:42:c0:a8:10:04",
                "IPv4Address": "192.168.16.4/20",
                "IPv6Address": ""
            },
            "92ee8b9f02e044c77765e723717788d67ea7434b222191e3bd9a019dc31fd17e": {
                "Name": "lora-app-server_postgres_1",
                "EndpointID": "0c032e0946d397ee09f14deac9cf0039c3a5bba99e8a88fcfe942a7661e322d8",
                "MacAddress": "02:42:c0:a8:10:02",
                "IPv4Address": "192.168.16.2/20",
                "IPv6Address": ""
            },
            "e4201031eb7e4d4a34a165f38b8871de1e6527c16cc1cf9021993d6ec0793b11": {
                "Name": "lora-app-server_redis_1",
                "EndpointID": "c0b595b4f7a7fa3848aa57c9b65b77158ee16ed0ed8a744e580f68f0dac5878f",
                "MacAddress": "02:42:c0:a8:10:03",
                "IPv4Address": "192.168.16.3/20",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]
loraserver-docker_default
代码语言:javascript
复制
# docker network inspect loraserver-docker_default
[
    {
        "Name": "loraserver-docker_default",
        "Id": "d4389dfb8f38d6a023de63ca25d74c65a5b4b114fbb83a1b43263e376000a22b",
        "Created": "2020-02-05T14:23:44.985567025+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "192.168.64.0/20",
                    "Gateway": "192.168.64.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "0329aa3dbabb76ab7d94cd19ff0ff89a8c48cc45d710b8060800a177dc2dd214": {
                "Name": "loraserver-docker_appserver_1",
                "EndpointID": "1080f620260de45592ac7c824f2e7a2f68846de5764e2734cd2f0745718c326a",
                "MacAddress": "02:42:c0:a8:40:07",
                "IPv4Address": "192.168.64.7/20",
                "IPv6Address": ""
            },
            "0d8afb7896f6d5ad7516c8079b2b38f6c88f2beac13ccb887273f62cd2d10538": {
                "Name": "loraserver-docker_geoserver_1",
                "EndpointID": "4775a6fb238a594972d8fbac20175537dc4fd83572051283484522777f42ecc5",
                "MacAddress": "02:42:c0:a8:40:04",
                "IPv4Address": "192.168.64.4/20",
                "IPv6Address": ""
            },
            "4bb2a05b99aa24a524137bbc4df3bd7e19bc8e45edd558c3bfda1d0530fc5c0b": {
                "Name": "loraserver-docker_postgresql_1",
                "EndpointID": "8e5e035a17bca1b957dc9c2d00ef385118407ad04bff87da3ca2009bfe7eeee5",
                "MacAddress": "02:42:c0:a8:40:06",
                "IPv4Address": "192.168.64.6/20",
                "IPv6Address": ""
            },
            "5e5813773f6dbc0af8136e234df9f6fd9658488fcafdf57dfdafd57cb9198c76": {
                "Name": "loraserver-docker_gatewaybridge_1",
                "EndpointID": "9e1956f9ed7f5cd4ca1009788a811ec243428ca4b0787b621f402b06c827375b",
                "MacAddress": "02:42:c0:a8:40:08",
                "IPv4Address": "192.168.64.8/20",
                "IPv6Address": ""
            },
            "9b8a1f733e2b3e995eaac5fcdd759ea7f4926943e511f3754c66293e7910ce6e": {
                "Name": "loraserver-docker_loraserver_1",
                "EndpointID": "ffc5869e673c591776f07d7fc5ab95ab017c9773dd11aa403010c69551b373a0",
                "MacAddress": "02:42:c0:a8:40:05",
                "IPv4Address": "192.168.64.5/20",
                "IPv6Address": ""
            },
            "c984f4f533bd904469a6afe70224baade7fffa550b345580bfe911e38235581e": {
                "Name": "loraserver-docker_redis_1",
                "EndpointID": "d7ebab7f77eac0beb71f207b94c7432ab04092c2c5442eeeaa1d87c7783085a1",
                "MacAddress": "02:42:c0:a8:40:02",
                "IPv4Address": "192.168.64.2/20",
                "IPv6Address": ""
            },
            "cc5400f93f5454ee5033f37a8b8bd584a292429baaa7c9fd16e788bd34200407": {
                "Name": "loraserver-docker_mosquitto_1",
                "EndpointID": "d47e177c7785d3a0f9c0e70e707bfdfb7cbb056f1b785bfc136a503559d7d929",
                "MacAddress": "02:42:c0:a8:40:03",
                "IPv4Address": "192.168.64.3/20",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "default",
            "com.docker.compose.project": "loraserver-docker",
            "com.docker.compose.version": "1.24.1"
        }
    }
]

2.2 容器网络梳理

bridge 172.17.0.1

  • influxdb 172.17.0.2

lora-app-server_default 192.168.16.1

  • lora-app-server_mosquitto_1
  • lora-app-server_postgres_1
  • lora-app-server_redis_1

loraserver-docker_default 192.168.64.1

  • loraserver-docker_appserver_1
  • loraserver-docker_gatewaybridge_1
  • loraserver-docker_loraserver_1
  • loraserver-docker_geoserver_1
  • loraserver-docker_postgresql_1
  • loraserver-docker_mosquitto_1
  • loraserver-docker_redis_1

综上所述,loraserver-docker_appserver_1 与 influxdb 不在同一个网络中,因此无法通信。

具体原因可以查看 Docker 官网教程实践 自定义 bridge 网络

3 处理方案

方案1 网桥 ip 即为宿主机 ip

influxdb 容器有对外暴露出 8086 端口,因此可以直接通过宿主机IP及暴露端口来定位该容器。

宿主机 IP 为网桥 IP,也就是 Docker0 IP 地址,可参考:

https://nickjanetakis.com/blog/docker-tip-65-get-your-docker-hosts-ip-address-from-in-a-container

代码语言:javascript
复制
# ip a
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:5f:e8:7c:be brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

因此我们通过 172.17.0.1:8086 即可定位到 influxdb 容器。我们在 chirpstack webui 中可以这样配置 InfluxDB integration API endpoint:

代码语言:javascript
复制
http://172.17.0.1:8086/write

方案2 将 influxdb 容器连接到相同网络中

代码语言:javascript
复制
# docker network connect loraserver-docker_default influxdb
# docker network inspect loraserver-docker_default 
[
    {
        "Name": "loraserver-docker_default",
        "Id": "d4389dfb8f38d6a023de63ca25d74c65a5b4b114fbb83a1b43263e376000a22b",
        "Created": "2020-02-05T14:23:44.985567025+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "192.168.64.0/20",
                    "Gateway": "192.168.64.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "0329aa3dbabb76ab7d94cd19ff0ff89a8c48cc45d710b8060800a177dc2dd214": {
                "Name": "loraserver-docker_appserver_1",
                "EndpointID": "1080f620260de45592ac7c824f2e7a2f68846de5764e2734cd2f0745718c326a",
                "MacAddress": "02:42:c0:a8:40:07",
                "IPv4Address": "192.168.64.7/20",
                "IPv6Address": ""
            },
            "0d8afb7896f6d5ad7516c8079b2b38f6c88f2beac13ccb887273f62cd2d10538": {
                "Name": "loraserver-docker_geoserver_1",
                "EndpointID": "4775a6fb238a594972d8fbac20175537dc4fd83572051283484522777f42ecc5",
                "MacAddress": "02:42:c0:a8:40:04",
                "IPv4Address": "192.168.64.4/20",
                "IPv6Address": ""
            },
            "4bb2a05b99aa24a524137bbc4df3bd7e19bc8e45edd558c3bfda1d0530fc5c0b": {
                "Name": "loraserver-docker_postgresql_1",
                "EndpointID": "8e5e035a17bca1b957dc9c2d00ef385118407ad04bff87da3ca2009bfe7eeee5",
                "MacAddress": "02:42:c0:a8:40:06",
                "IPv4Address": "192.168.64.6/20",
                "IPv6Address": ""
            },
            "5e5813773f6dbc0af8136e234df9f6fd9658488fcafdf57dfdafd57cb9198c76": {
                "Name": "loraserver-docker_gatewaybridge_1",
                "EndpointID": "9e1956f9ed7f5cd4ca1009788a811ec243428ca4b0787b621f402b06c827375b",
                "MacAddress": "02:42:c0:a8:40:08",
                "IPv4Address": "192.168.64.8/20",
                "IPv6Address": ""
            },
            "98b72943ab195564fb1a8465243bff96cbc7dc989a3a16dab5269afc835336f5": {
                "Name": "influxdb",
                "EndpointID": "b89b8104bcf27a29bc3a7b470206a4669e5513b37d09e888ab970425299a807c",
                "MacAddress": "02:42:c0:a8:40:09",
                "IPv4Address": "192.168.64.9/20",
                "IPv6Address": ""
            },
            "9b8a1f733e2b3e995eaac5fcdd759ea7f4926943e511f3754c66293e7910ce6e": {
                "Name": "loraserver-docker_loraserver_1",
                "EndpointID": "ffc5869e673c591776f07d7fc5ab95ab017c9773dd11aa403010c69551b373a0",
                "MacAddress": "02:42:c0:a8:40:05",
                "IPv4Address": "192.168.64.5/20",
                "IPv6Address": ""
            },
            "c984f4f533bd904469a6afe70224baade7fffa550b345580bfe911e38235581e": {
                "Name": "loraserver-docker_redis_1",
                "EndpointID": "d7ebab7f77eac0beb71f207b94c7432ab04092c2c5442eeeaa1d87c7783085a1",
                "MacAddress": "02:42:c0:a8:40:02",
                "IPv4Address": "192.168.64.2/20",
                "IPv6Address": ""
            },
            "cc5400f93f5454ee5033f37a8b8bd584a292429baaa7c9fd16e788bd34200407": {
                "Name": "loraserver-docker_mosquitto_1",
                "EndpointID": "d47e177c7785d3a0f9c0e70e707bfdfb7cbb056f1b785bfc136a503559d7d929",
                "MacAddress": "02:42:c0:a8:40:03",
                "IPv4Address": "192.168.64.3/20",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "default",
            "com.docker.compose.project": "loraserver-docker",
            "com.docker.compose.version": "1.24.1"
        }
    }
]

这样,我们可以通过容器名 influxdb 直接访问该容器,也可以通过容器 ip 192.168.64.9 来访问。

因此我们在 chirpstack webui 中可以这样配置 InfluxDB integration API endpoint:

代码语言:javascript
复制
http://influxdb:8086/write

或者:

代码语言:javascript
复制
http://192.168.64.9:8086/write

4 小结

这节笔记从 chirpstack 的 app_server 容器外接 influxdb 无法通过 localhost 连接的一个典型问题入手,分析了 chirpstack 所涉及的容器网络,针对问题给出了 网桥ip即为宿主机ip、将 influxdb 容器也接入相同容器网络 等两种解决方案。

END

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 1 问题描述
  • 2 原因分析
    • 2.1 容器网络分析
      • lora-app-server_default
      • loraserver-docker_default
    • 2.2 容器网络梳理
    • 3 处理方案
      • 方案1 网桥 ip 即为宿主机 ip
        • 方案2 将 influxdb 容器连接到相同网络中
        • 4 小结
        • END
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档