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/