Docker设置-多个容器之间的网络连接

问题描述 投票:0回答:1

在我的linux服务器上,我正在运行3张图像-

A)带有此docker-compose文件的Docker和Zookeeper-

version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper:3.4.6
    ports:
     - "2181:2181"
  kafka:
    image: wurstmeister/kafka:2.11-2.0.0
    ports:
     - "9092:9092"
    expose:
     - "9093"
    environment:
      KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka:9093,OUTSIDE://localhost:9092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_LISTENERS: INSIDE://0.0.0.0:9093,OUTSIDE://0.0.0.0:9092
      KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 

这将向主机打开kafka代理。

B)JupyterHub

docker run -v /notebooks:/notebooks -p 8000:8000 jupyterhub

C)Confluent Schema Registry(我还没有尝试过,但是在我的最终设置中,我也会有一个模式注册表容器)

docker run confluentinc/cp-schema-registry

两者都启动时没有任何问题。但是,如何打开jupyterhub容器到kafka容器和架构注册表端口,以便我的python脚本可以访问代理。

docker apache-kafka docker-compose docker-machine confluent
1个回答
0
投票

我假设您想按需运行jupyter笔记本容器,而zookeeper和kafka容器将始终单独运行?您可以创建一个docker network并将所有容器加入该网络。这样,您的容器就可以通过它们的名称相互解析。

  1. Create a network
  2. Specify this network in compose file
  3. [docker run启动其他容器时,请使用--network选项。

0
投票

如果运行--network,则可以找到该docker network ls的网络的名称;它将被命名为Compose creates for you。然后,您可以启动连接到该网络的容器,

directoryname_default

如果您可以将这些文件包含在同一docker run --net directoryname_default confluentinc/cp-schema-registry 文件中,则无需执行任何特殊操作。特别是对于Confluent模式注册表来说,这可能很有意义;如果您使用的是Avro消息,则可以将其视为Kafka堆栈的核心部分。

您可以在此处使用Docker Compose服务名称docker-compose.yml作为主机名,但是由于您需要连接到“内部”侦听器,因此您需要配置一个非默认端口9093。(Docker Compose [C0 ]指令的作用不大,可以放心删除。)

© www.soinside.com 2019 - 2024. All rights reserved.