【发布时间】:2019-10-27 18:47:59
【问题描述】:
我正在使用wurstmeister's docker-kafka 项目在容器中运行 kafka/zookeeper。我使用 localhost 作为KAFKA_ADVERTISED_HOST_NAME: localhost 变量来构建容器。
我编写了一个 Java 应用程序,它使用 flink 来连接和消费这个 Kafka 容器的一个主题。如果我导出一个可运行的 jar 并从我的机器上运行它,它绝对可以正常工作。当我创建以下图像以从另一个 docker 容器运行 jar 时,我收到一个异常(执行后大约 30 秒)Exception in thread "main" org.apache.flink.runtime.client.JobExecutionException: org.apache.kafka.common.errors.TimeoutException: Timeout expired while fetching topic metadata,我认为这与我的 Java 程序无法与运行在其他容器。
这是我的 Java 应用程序的 dockerfile:
# Dockerfile
FROM anapsix/alpine-java
MAINTAINER myself myself
COPY myApp.jar /home/myApp.jar
CMD ["java","-jar","/home/myApp.jar"]
这是 wurstmeister 的 docker kafka 的 docker-compose.yml:
version: "3.5"
networks:
myNetwork:
name: myNetwork
driver: bridge
services:
zookeeper:
image: wurstmeister/zookeeper
ports:
- "2181:2181"
networks:
- myNetwork
kafka:
build: .
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: localhost
KAFKA_ADVERTISED_PORT: "9092"
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true"
ALLOW_PLAINTEXT_LISTENER: "yes"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
networks:
- myNetwork
auth_analytics:
build:
context: .
dockerfile: auth_dockerfile
depends_on:
- kafka
networks:
- myNetwork
我已经尝试了上述的多个版本。最初我没有设置任何我认为可能是问题的网络,但是,以上创建网络并没有任何区别。我在我的 Java 应用程序中尝试了“localhost:9092”作为引导服务器,并在网上阅读时尝试了“myNetwork:9092”。
我还从 wurstmeister 阅读了这篇关于连接性的 FAQ,但我认为我的设置没有问题。
我还尝试在不使用 docker-compose 的情况下运行我的 Java 应用程序映像(我运行了 docker-compose 来启动 zookeeper/kafka,然后我做了一个 docker build,docker run 在我的 Java 应用程序的映像上运行。这个没有区别。)
我被困住了。我做错了什么?
【问题讨论】:
标签: docker apache-kafka docker-compose