docker由zookeeper、kafka、redis和java spring boot组成

kb5ga3dv  于 2021-06-08  发布在  Kafka
关注(0)|答案(1)|浏览(317)

我很难使用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: /kafka-websocket-connector
ports:
- "8077:8077"
depends_on:
- kafka
- redis
- zookeeper
links:
- "kafka"
- "redis"

这个 `Dockerfile` 在下面引用的 `kafka-websocket-connector` 具体如下: `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

我不知道这是否必然与连接这些组件有关,但是我的 build.gradle Spring应用程序如下: 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 = ''

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应用程序。
7hiiyaii

7hiiyaii1#

这个 KAFKA_ADVERTISED_HOST_NAME: localhost 环境变量 kafka 服务可能是问题的原因。它需要其他容器可以到达。试着把它改成 KAFKA_ADVERTISED_HOST_NAME: kafka .
docker-compose.yml中定义的所有服务容器都将添加到用户定义的网络中,该网络以compose项目命名。使用与容器名称相同的主机名,此网络中的容器可以彼此访问和发现。你可以在他们的文档中找到更多关于docker compose网络的信息。

相关问题