Docker 容器间通信
Docker inter-container communication
我在这里遇到了一个相对简单的问题,但我开始想知道为什么它不起作用。
我想用 Docker Compose 启动两个 Docker 容器:InfluxDB 和 Chronograph。
不幸的是,计时器无法到达给定主机名下的 InfluxDB:“无法连接到 InfluxDB Influx 1:联系源时出错”
这可能是什么原因?
这是我的docker-compose.yml:
version: "3.8"
services:
influxdb:
image: influxdb
restart: unless-stopped
ports:
- 8086:8086
volumes:
- influxdb-volume:/var/lib/influxdb
networks:
- test
chronograf:
image: chronograf
restart: unless-stopped
ports:
- 8888:8888
volumes:
- chronograf-volume:/var/lib/chronograf
depends_on:
- influxdb
networks:
- test
volumes:
influxdb-volume:
chronograf-volume:
networks:
test:
driver: bridge
我也试过在两个容器内启动一个shell然后容器互相ping或者使用wget获取另一个容器的HTTP-API。即使是容器之间的这种通信也不起作用。在使用 wget 和 ping 的两次尝试中,我都超时了。
不得不说我这里用的是Banana Pi BPI-M1。是否有可能是由于 Linux 容器到容器的通信无法正常工作?
如果未配置,chronograf 将尝试访问 localhost:8086
上的 influxdb。为了能够访问正确的 influxdb 实例,您需要使用 --influxdb-url
命令行标志或(个人偏好)环境变量 INFLUXDB_URL
相应地指定 url。这些应该设置为 http://influxdb:8086
的值,它是从您的撰写文件的服务名称派生的 docker DNS 名称(services
下面一级的键)。
这应该可以解决问题(片段):
chronograf:
image: chronograf
restart: unless-stopped
ports:
- 8888:8888
volumes:
- chronograf-volume:/var/lib/chronograf
environment:
- INFLUXDB_URL=http://influxdb:8086
depends_on:
- influxdb
networks:
- test
请查看 chronograf readme (section Using the container with InfluxDB) for details on configuring the image and check the docker compose networking docs 有关网络和 DNS 命名的更多信息。
Docker 服务在表过滤器和 nat 中创建了一些 iptables 条目。我的 OpenVPN 网关脚本在启动时执行了以下命令:
iptables --flush -t filter
iptables --flush -t nat
这将从 Docker 中删除条目,容器与 Internet 之间的通信将不再可能。
我重写了脚本,现在一切正常了。
我在这里遇到了一个相对简单的问题,但我开始想知道为什么它不起作用。
我想用 Docker Compose 启动两个 Docker 容器:InfluxDB 和 Chronograph。
不幸的是,计时器无法到达给定主机名下的 InfluxDB:“无法连接到 InfluxDB Influx 1:联系源时出错”
这可能是什么原因?
这是我的docker-compose.yml:
version: "3.8"
services:
influxdb:
image: influxdb
restart: unless-stopped
ports:
- 8086:8086
volumes:
- influxdb-volume:/var/lib/influxdb
networks:
- test
chronograf:
image: chronograf
restart: unless-stopped
ports:
- 8888:8888
volumes:
- chronograf-volume:/var/lib/chronograf
depends_on:
- influxdb
networks:
- test
volumes:
influxdb-volume:
chronograf-volume:
networks:
test:
driver: bridge
我也试过在两个容器内启动一个shell然后容器互相ping或者使用wget获取另一个容器的HTTP-API。即使是容器之间的这种通信也不起作用。在使用 wget 和 ping 的两次尝试中,我都超时了。
不得不说我这里用的是Banana Pi BPI-M1。是否有可能是由于 Linux 容器到容器的通信无法正常工作?
如果未配置,chronograf 将尝试访问 localhost:8086
上的 influxdb。为了能够访问正确的 influxdb 实例,您需要使用 --influxdb-url
命令行标志或(个人偏好)环境变量 INFLUXDB_URL
相应地指定 url。这些应该设置为 http://influxdb:8086
的值,它是从您的撰写文件的服务名称派生的 docker DNS 名称(services
下面一级的键)。
这应该可以解决问题(片段):
chronograf:
image: chronograf
restart: unless-stopped
ports:
- 8888:8888
volumes:
- chronograf-volume:/var/lib/chronograf
environment:
- INFLUXDB_URL=http://influxdb:8086
depends_on:
- influxdb
networks:
- test
请查看 chronograf readme (section Using the container with InfluxDB) for details on configuring the image and check the docker compose networking docs 有关网络和 DNS 命名的更多信息。
Docker 服务在表过滤器和 nat 中创建了一些 iptables 条目。我的 OpenVPN 网关脚本在启动时执行了以下命令:
iptables --flush -t filter
iptables --flush -t nat
这将从 Docker 中删除条目,容器与 Internet 之间的通信将不再可能。
我重写了脚本,现在一切正常了。