docker - 如何从父主机解析Docker主机名?

标签 docker docker-compose

docker-compose up

。 。 。
docker-compose ps

Name                               Command               State                         Ports                        
------------------------------------------------------------------------------------------------------------------------------------
localdockerdbandredis_kafka1_1           start-kafka.sh                   Up      0.0.0.0:9092->9092/tcp                             
localdockerdbandredis_kafka2_1           start-kafka.sh                   Up      0.0.0.0:9093->9092/tcp, 9093/tcp                   
localdockerdbandredis_kafka3_1           start-kafka.sh                   Up      0.0.0.0:9094->9092/tcp, 9094/tcp                   
localdockerdbandredis_spacejam_mysql_1   docker-entrypoint.sh mysqld      Up      0.0.0.0:3306->3306/tcp                             
localdockerdbandredis_spacejam_redis_1   docker-entrypoint.sh redis ...   Up      0.0.0.0:6379->6379/tcp                             
localdockerdbandredis_zookeeper_1        /bin/sh -c /usr/sbin/sshd  ...   Up      0.0.0.0:2181->2181/tcp, 22/tcp, 2888/tcp, 3888/tcp 

有没有办法从主机解析名称localdockerdbandredis_kafka1_1。例如,
telnet localdockerdbandredis_kafka1_1 9092

设置环境的开发人员拥有我们的代码,可以按名称连接到localdockerdbandredis_spacejam_mysql_1,但是他正在休假,而且我是docker的新手,所以我不知道如何使用名称来引用Kafka。

我的docker.compose-yml文件看起来像
version: '2'

services:

  spacejam_mysql:
    # image: mariadb:10.1.14
    # image: mysql:5.6
    image: iggcanada/mysql
    expose:
      - "3306"
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: ????
      MYSQL_USER: ????
      MYSQL_PASSWORD: ????
    networks:
      - madlands

  spacejam_redis:
    image: redis:latest
    expose:
      - "6379"
    ports:
      - "6379:6379"
    networks:
      - madlands

  zookeeper:
    image: wurstmeister/zookeeper
    expose:
      - "2181"
    ports:
      - "2181:2181"
    networks:
      - madlands

# http://wurstmeister.github.io/kafka-docker

  kafka1:
    build: .
    expose:
      - "9092"
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: localdockerdbandredis_kafka1_1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_DELETE_TOPIC_ENABLE: "true"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - madlands

  kafka2:
    build: .
    expose:
      - "9093"
    ports:
      - "9093:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: localdockerdbandredis_kafka2_1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_DELETE_TOPIC_ENABLE: "true"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - madlands

  kafka3:
    build: .
    expose:
      - "9094"
    ports:
      - "9094:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: localdockerdbandredis_kafka3_1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_DELETE_TOPIC_ENABLE: "true"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - madlands

# Create our named network of type bridge
networks:
  madlands:
    driver: bridge

基本上在我们的代码中,我希望能够将kafkaBootstrapServers配置为
spacejam.kafka.bootstrap.servers = "localdockerdbandredis_kafka1_1:9092,localdockerdbandredis_kafka2_1:9093,localdockerdbandredis_kafka3_1:9094"

我们的代码使用的方式
akka-persistence-sql-async.url = "jdbc:mysql://localdockerdbandredis_spacejam_mysql_1/spacejam_akka_persistence"

别处。

我一直在搜索有关如何从Docker解析名称的文档,但仍然找不到任何似乎可以描述如何执行此操作的文档。

最佳答案

从docker-compose输出中,您可以看到端口映射

Name                               Command               State                         Ports                        
------------------------------------------------------------------------------------------------------------------------------------
localdockerdbandredis_kafka1_1           start-kafka.sh                   Up      0.0.0.0:9092->9092/tcp                             
localdockerdbandredis_kafka2_1           start-kafka.sh                   Up      0.0.0.0:9093->9092/tcp, 9093/tcp                   
localdockerdbandredis_kafka3_1           start-kafka.sh                   Up      0.0.0.0:9094->9092/tcp, 9094/tcp            

因此,对于您来说,Kafka1,Kafka2,Kafka映射的端口是9092、9093、9094。这意味着您可以在localhost和这些端口上telnet到它们
telnet 127.0.0.1 9092

在您的计算机上将您连接到Kafka1。要连接到Kafka 2,您将使用
telnet 127.0.0.1 9093

通过名称引用它们的唯一方法是在系统中创建一个主机条目,并将其指向localhost或您的计算机IP(如果主机文件不在您的计算机上)

/ etc / hosts
127.0.0.1 localdockerdbandredis_kafka1_1 localdockerdbandredis_kafka1_2 localdockerdbandredis_kafka1_3

现在,您可能面临的唯一问题是,当从计算机上运行的代码(外部docker)连接到localdockerdbandredis_kafka1_2时,因为kafka使用公告的主机名和端口9092起作用,但是您的计算机将仅提供对9092上的Kafka 1的访问。

因此,输入这三个主机条目,将它们指向本地,然后查看是否一切正常

关于docker - 如何从父主机解析Docker主机名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45642191/

相关文章:

docker - 在 Docker 撰写文件中定义任务

docker-compose 多拱

shell - 如何从 'docker run .... [command]' 追加/修改 docker 容器中的文件

javascript - 为什么 ISO 日期转换在 javascript 环境中不一致以及如何修复?

docker - 将数据库包装在 docker 镜像中

azure - Microsoft Azure Docker Compose 与多重播放镜像

tomcat - 如何将docker容器的IP地址动态映射到另一个容器

python - 找不到Docker Locust locustfile.py

node.js - 部署多个 package.json Google Cloud

networking - docker-compose:指定哪个接口(interface)将连接到每个网络(当有多个网络时)