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

时间:2017-08-11 19:03:27

标签: 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解析名称的文档,但仍未找到任何似乎描述如何执行此操作的内容。

1 个答案:

答案 0 :(得分:1)

从您的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 /主机

127.0.0.1 localdockerdbandredis_kafka1_1 localdockerdbandredis_kafka1_2 localdockerdbandredis_kafka1_3

现在唯一的问题是当您从机器上运行的代码(Docker外部)连接localdockerdbandredis_kafka1_2时,因为kafka使用广告主机名和端口9092工作,但您的机器只提供Kafka 1的访问权限9092。

所以制作这三个主机条目,将它们指向本地,看看是否一切正常