Reputation: 2243
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
Is there a way to resolve the name localdockerdbandredis_kafka1_1
from the host. For example,
telnet localdockerdbandredis_kafka1_1 9092
The developer who set up our environment has our code being able to connect to localdockerdbandredis_spacejam_mysql_1
by name, but he is on vacation, and I am new to docker, so I cannot figure out how I can refer to Kafka by name.
My docker.compose-yml file looks like
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
Basically in our code I want to be able to configure kafkaBootstrapServers as
spacejam.kafka.bootstrap.servers = "localdockerdbandredis_kafka1_1:9092,localdockerdbandredis_kafka2_1:9093,localdockerdbandredis_kafka3_1:9094"
the way our code uses
akka-persistence-sql-async.url = "jdbc:mysql://localdockerdbandredis_spacejam_mysql_1/spacejam_akka_persistence"
elsewhere.
I have been searching documentation on how to resolve names from Docker, but still have not found anything that seems to describe how to do this.
Upvotes: 1
Views: 187
Reputation: 146630
From you docker-compose output you can see the port mappings
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
So for you Kafka1, Kafka2, Kafka the ports mapped are 9092, 9093, 9094. Which means you can telnet to them on localhost and these port
telnet 127.0.0.1 9092
On your machine will connect you to Kafka1. To connect to Kafka 2 you will use
telnet 127.0.0.1 9093
The only way to refer to these by name is to make a host entry in your system and point that either to localhost or your machine IP (if host file not on your machine)
/etc/hosts
127.0.0.1 localdockerdbandredis_kafka1_1 localdockerdbandredis_kafka1_2 localdockerdbandredis_kafka1_3
Now only problem you may face is when connecting to localdockerdbandredis_kafka1_2
from code running on your machine (outside docker) as kafka works using advertised host name and on port 9092 but your machine will only provide access of Kafka 1 on 9092.
So make these three host entries, point them to local and see if everything works
Upvotes: 1