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解析名称的文档,但仍未找到任何似乎描述如何执行此操作的内容。
答案 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。
所以制作这三个主机条目,将它们指向本地,看看是否一切正常