Docker与Zookeeper,Kafka,Redis和Java Spring Boot组合
我很难用Docker Compose将这些容器连接在一起,让我先说一下,我现在也在Mac上运行。
该应用程序目前正在使用Docker Compose,因为如果我单独运行这些应用程序(而不是使用Docker),应用程序将按预期工作。
按照预期意味着,应用程序正在从Redis中读取数据,并且将某些Kafka主题中的数据提取出来并显示在前端。
谈到我认为是必要的文件。
docker-compose.yml
version: '2' services: zookeeper: image: wurstmeister/zookeeper ports: - "2181:2181" kafka: image: wurstmeister/kafka:0.10.2.0 ports: - "9092:9092" environment: KAFKA_ADVERTISED_HOST_NAME: localhost KAFKA_CREATE_TOPICS: "flight-events:1:1,reported-flight-time-events:1:1,pax-flight-events:1:1" KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 volumes: - /var/run/docker.sock:/var/run/docker.sock depends_on: - zookeeper redis: image: redis ports: - "6379" restart: always kafka-websocket-connector: build: ./kafka-websocket-connector image: <user>/kafka-websocket-connector ports: - "8077:8077" depends_on: - kafka - redis - zookeeper links: - "kafka" - "redis"
在kafka-websocket-connector
引用的Dockerfile
如下所示:
Dockerfile
FROM frolvlad/alpine-oraclejdk8:slim VOLUME /tmp ADD target/kafka-websocket-connector-0.0.1-SNAPSHOT.jar app.jar ENV JAVA_OPTS="" ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
如果我试图运行命令docker-compose up --build
我收到以下错误:
ERROR: Service 'kafka-websocket-connector' failed to build: ADD failed: stat /var/lib/docker/tmp/docker-builder838069739/target/kafka-websocket-connector-0.0.1-SNAPSHOT.jar: no such file or directory
我不知道这是否与连接这些组件有关,但是我的Spring应用程序的build.gradle
如下所示:
build.gradle
buildscript { ext { springBootVersion = '1.5.4.RELEASE' } repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") classpath('se.transmode.gradle:gradle-docker:1.2') } } apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'org.springframework.boot' apply plugin: 'docker' group = '<user>' jar { baseName = 'kafka-websocket-connector' version = '0.0.1-SNAPSHOT' sourceCompatibility = 1.8 } task buildDocker(type: Docker, dependsOn: build) { applicationName = jar.baseName dockerfile = file('Dockerfile') doFirst { copy { from jar into "${stageDir}/target" } } } repositories { mavenCentral() } ext { springCloudVersion = 'Dalston.SR1' } dependencies { compile('org.springframework.boot:spring-boot-starter-data-redis') compile('org.springframework.kafka:spring-kafka') compile('org.springframework.boot:spring-boot-starter-web') compile('org.springframework.boot:spring-boot-starter-websocket') compile("org.webjars:webjars-locator") compile("org.webjars:sockjs-client:1.0.2") compile("org.webjars:stomp-websocket:2.3.3") compile("org.webjars:bootstrap:3.3.7") compile("org.webjars:jquery:3.1.0") compile group: 'org.webjars', name: 'd3js', version: '4.2.1' testCompile('org.springframework.boot:spring-boot-starter-test') testCompile('org.springframework.restdocs:spring-restdocs-mockmvc') } dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" } } bootRepackage { executable = true enabled = true }
因此,为了重新解决这个问题,我无法使用Docker Compose连接下列组件:Zookeeper,Kafka,Redis和Spring Boot应用程序。
您的kafka
服务中的KAFKA_ADVERTISED_HOST_NAME: localhost
环境variables可能是问题的原因。 它需要通过其他容器到达。 尝试将其更改为KAFKA_ADVERTISED_HOST_NAME: kafka
。
docker-compose.yml中定义的所有服务容器都将添加到用户定义的networking中,并以您的撰写项目命名。 这个networking中的容器可以被其他每个容器访问和发现,使用与容器名称相同的主机名。 您可以在其文档中find有关Docker撰写networking的更多信息。
- 使用Kafka,Zookeeper和MongoDB Dockerize Spring Boot Java应用程序
- 由于Docker延迟,Kafka超时
- 如何在Docker上设置#Spark /#Kafka?
- 将消息发布到docker中运行的Kafka
- Kafka Docker和从9092到9093的端口转发
- 卡夫卡连接logindocker集装箱
- stream浪者箱子和docker提供者:巨人和Kafka
- 使用Kafka代理的Dockerized Spring Cloud Stream服务无法连接到Zookeeper
- 是否有可能使用卡夫卡与docker组成一个单一的主机,而不暴露动物园pipe理员和卡夫卡端口到公共互联网?