如何在包括 localhost 机器在内的 docker 容器之间进行通信

时间:2021-04-26 19:38:51

标签: docker docker-compose docker-networking docker-network

我的问题:

version: '2'
services:
  zookeeper:
    container_name: zookeeper
    image: debezium/zookeeper:${DEBEZIUM_VERSION}
    ports:
     - 2181:2181
     - 2888:2888
     - 3888:3888
  kafka:
    container_name: kafka
    image: debezium/kafka:${DEBEZIUM_VERSION}
    ports:
     - 9092:9092
    links:
     - zookeeper
    environment:
     - ZOOKEEPER_CONNECT=zookeeper:2181  
  connect:
    container_name: connect
    image: debezium/connect:${DEBEZIUM_VERSION}
    ports:
     - 8083:8083
    links:
     - kafka
    environment:
     - BOOTSTRAP_SERVERS=kafka:9092
     - GROUP_ID=1
     - CONFIG_STORAGE_TOPIC=my_connect_configs
     - OFFSET_STORAGE_TOPIC=my_connect_offsets
     - STATUS_STORAGE_TOPIC=my_connect_statuses

这里我想让 connect 容器调用我的本地主机 PostGres

但是它抛出了无法连接到 jdbs:postgresql//localhost:5432/test 错误

那么我该如何设置 connect 的网络以便

  1. 它可以发现zookeeperkafka
  2. 它也可以连接到我的本地机器

附注 我尝试在连接中添加 network_mode: host 但它没有发现 kafka 和 zookeeper

1 个答案:

答案 0 :(得分:0)

connect 的 localhost 是 docker 的专用网络,而不是您的计算机 localhost,您的 postgres 显然位于。

您需要使用 network_mode: host,但当然其他 2 个容器将无法在专用网络上访问。因此,解决方案是对所有容器使用 network_mode: host,或者将您的 postgres 带到与 docker 容器相同的 docker-compose 文件中,以便它也位于专用网络上