![](/img/trans.png)
[英]How to access a server(which is running in a docker container) from other machine?
[英]Access KSQL Server from outside of a Docker Container using a different machine (local network)
我創建了以下 Docker 容器來運行zookeeper
、 kafka
、 ksql
和ksql-cli
。 當我從 Docker 運行的同一台機器上運行命令docker-compose exec ksqldb-cli ksql http://ksqldb-server:8088
ksql-server
, ksql-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.