首页 > 解决方案 > 如何在包括 localhost 机器的 docker 容器之间进行通信

问题描述

我的问题 :

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. 它也可以连接到我的本地主机机器

PS我尝试添加 network_mode: host连接,但没有发现kafka和zookeeper

标签: dockerdocker-composedocker-networkingdocker-network

解决方案


localhost forconnect是 docker 的专用网络,而不是你的计算机 localhost 显然是你的 postgres 所在的位置。

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


推荐阅读