你如何解决来自父主机的Docker主机名?

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 

有没有办法从主机parsing名称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 

基本上在我们的代码中,我希望能够将kafkaBootstrapServersconfiguration为

 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" 

别处。

我一直在寻找关于如何parsingDocker名称的文档,但还没有find任何似乎描述如何执行此操作的内容。

从你的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。这意味着你可以telnet到他们的localhost和这些端口

 telnet 127.0.0.1 9092 

在你的机器上将连接你到Kafka1。 要连接到Kafka 2,您将使用

 telnet 127.0.0.1 9093 

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

/ etc / hosts文件

 127.0.0.1 localdockerdbandredis_kafka1_1 localdockerdbandredis_kafka1_2 localdockerdbandredis_kafka1_3 

现在唯一的问题是当你的机器上运行的代码连接到localdockerdbandredis_kafka1_2时,kafka使用广告的主机名和端口9092工作,但是你的机器只能在9092上提供对Kafka 1的访问。

因此,让这三个主机条目,指向他们本地,看看是否一切正常