我創建了以下Docker容器運行zookeeper,kafka,ksql,和ksql-cli也。當我從運行docker-compose exec ksqldb-cli ksql http://ksqldb-server:8088Docker 的同一臺機器上運行命令時,ksql-cli可以訪問ksql-server就好了。
但是,我想訪問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從同一本地網路下的另一臺筆記本電腦訪問時,我收到連接錯誤/連接被拒絕。我嘗試ksqldb-server使用 Python ksql-python包訪問。
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)
我也嘗試將KSQL_LISTENERS: "http://0.0.0.0:8088"下面的更改為ksqldb-server,KSQL_LISTENERS: "http://192.168.178.218:8088"但這也不起作用。
任何提示都會非常有幫助,因為我最近兩天都被困在這里!
uj5u.com熱心網友回復:
你需要保留KSQL_LISTENERS: "http://0.0.0.0:8088". 這將容器系結為接受所有傳入埠 8088 的流量
然后,ports在 Compose 中,主機 8088 流量被轉發到容器 8088。
因此,對于任何外部客戶端,您需要在埠 8088 上連接到該主機的 LAN / 外部 IP。您可能需要明確允許 TCP 流量進入該服務器主機的防火墻的該埠。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/407042.html
標籤:
