簡體   English   中英

使用不同的機器(本地網絡)從 Docker 容器外部訪問 KSQL Server

[英]Access KSQL Server from outside of a Docker Container using a different machine (local network)

我創建了以下 Docker 容器來運行zookeeperkafkaksqlksql-cli 當我從 Docker 運行的同一台機器上運行命令docker-compose exec ksqldb-cli ksql http://ksqldb-server:8088 ksql-serverksql-cli

但是,我想訪問同一台機器之外的ksql-server ,但在同一本地網絡下使用不同的筆記本電腦。 我怎么做?

這是相關的docker-compose.yml文件:

version: '3.8'

services:
  zookeeper:
    image: confluentinc/cp-zookeeper:latest
    container_name: zookeeper
    networks:
      - kafka_network
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
    ports:
      - 22181:2181
  kafka:
    image: confluentinc/cp-kafka:latest
    container_name: kafka
    networks:
      - kafka_network
    depends_on:
      - zookeeper
    ports:
      - 29092:29092
      - 29093:29093
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENERS: EXTERNAL_SAME_HOST://:29092,EXTERNAL_DIFFERENT_HOST://:29093,INTERNAL://:9092
      KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:9092,EXTERNAL_SAME_HOST://localhost:29092,EXTERNAL_DIFFERENT_HOST://192.168.178.218:29093
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL_SAME_HOST:PLAINTEXT,EXTERNAL_DIFFERENT_HOST:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
  ksqldb-server:
    image: confluentinc/cp-ksqldb-server:latest
    container_name: ksqldb-server
    hostname: ksqldb-server
    networks:
      - kafka_network
    depends_on:
      - kafka
    ports:
      - "8088:8088"
    environment:
      KSQL_CONFIG_DIR: "/etc/ksql"
      KSQL_BOOTSTRAP_SERVERS: "kafka:9092"
      KSQL_HOST_NAME: ksqldb-server
      KSQL_LISTENERS: "http://0.0.0.0:8088"
      KSQL_CACHE_MAX_BYTES_BUFFERING: 0
      KSQL_KSQL_SCHEMA_REGISTRY_URL: "http://schema-registry:8081"
      KSQL_KSQL_LOGGING_PROCESSING_TOPIC_REPLICATION_FACTOR: 1
      KSQL_KSQL_LOGGING_PROCESSING_TOPIC_AUTO_CREATE: 'true'
      KSQL_KSQL_LOGGING_PROCESSING_STREAM_AUTO_CREATE: 'true'

  ksqldb-cli:
    image: confluentinc/cp-ksqldb-cli:latest
    container_name: ksqldb-cli
    networks:
      - kafka_network
    depends_on:
      - kafka
      - ksqldb-server
    entrypoint: /bin/sh
    tty: true
networks:
  kafka_network:
    name: kafka_docker_sse

當我嘗試從同一本地網絡下的另一台筆記本電腦訪問ksql-server時,我收到連接錯誤/連接被拒絕。 我嘗試使用 Python ksql-python package 訪問ksqldb-server

pip install ksql

from ksql import KSQLAPI
client = KSQLAPI('http://ksql-server:8088')

# OR
# client = KSQLAPI('http://0.0.0.0:8088')
# client = KSQLAPI('http://192.168.178.218:8088')

if __name__ == '__main__':
    print(client)

我還嘗試將ksqldb-server下的KSQL_LISTENERS: "http://0.0.0.0:8088"更改為KSQL_LISTENERS: "http://192.168.178.218:8088"但這也不起作用。

任何提示都會非常有幫助,因為我最近兩天都被困在這里!

您需要保留KSQL_LISTENERS: "http://0.0.0.0:8088" 這將容器綁定為接受所有傳入端口 8088 的流量

然后,使用 Compose 中的ports ,將主機 8088 流量轉發到容器 8088。

因此,對於任何外部客戶端,您需要在端口 8088 上連接到該主機 LAN/外部 IP。您可能需要明確允許 TCP 流量進入該服務器主機的防火牆以用於該端口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM