使用 Docker 找不到 Kafka 和 Zookeeper 脚本
Kafka and Zookeeper Scripts Not Found Using Docker
详细信息: 我正在尝试使用 docker-compose.yml 文件 运行 wurstmeister/kafka and wurstmeister/zookeeper 图像,附加在这个post.
的底部
为了测试容器,我遵循了official site of kafka。它指的是图像中不可用的某些脚本,例如 bin/kafka-server-start.sh
。我还尝试使用 docker exec -it zookeeper bash
和 docker exec -it kafka bash
遍历容器,并在 /bin/
目录中找到 zkServer.sh 和其他一些脚本。
问题:问题是我不知道如何使用它,因为config/server.properties在kafka容器而不是zookeeper中可用。所以我不知道正确的解决方案。下载脚本放到宿主机目录下复制到容器里是不是一个好的方案?
docker-compose.yml
version:'2'
services:
zookeeper:
image: wurstmeister/zookeeper
container_name: zookeeper
ports:
- "2181:2181"
kafka:
build: .
container_name: kafka
links:
- zookeeper
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: kafka
KAFKA_ADVERTISED_PORT: 9092
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_OPTS: -javaagent:/usr/app/jmx_prometheus_javaagent.jar=7071:/usr/app/prom-jmx-agent-config.yml
volumes:
- /var/run/docker.sock:/var/run/docker.sock
Dockerfile
FROM wurstmeister/kafka
ADD prom-jmx-agent-config.yml /usr/app/prom-jmx-agent-config.yml
ADD jmx_prometheus_javaagent-0.10.jar /usr/app/jmx_prometheus_javaagent.jar
您不必使用 bin/kafka-server-start.sh
脚本。 wurstmeister/kafka
图像中有一个名为 start-kafka.sh
的脚本。以下是我在我的一个项目中的做法:
docker-compose.yml
zookeeper:
container_name: zookeper
image: wurstmeister/zookeeper:3.4.6
ports:
- "2181:2181"
kafka:
container_name: kafka
build:
context: .
dockerfile: kafka.Dockerfile
image: kafka-service
ports:
- "9092:9092"
kafka.Dockerfile
FROM wurstmeister/kafka:2.11-2.0.0
COPY wait-for-it.sh /wait-for-it.sh
RUN chmod +x /wait-for-it.sh
CMD ["/wait-for-it.sh", "zookeper:2181", "--", "start-kafka.sh"]
在 dockerfile 中,我基本上说:"Wait for zookeeper, he has to be up first,then you can start, then after him, run start-kafka.sh
"。您可以在此处下载 wait-for-it.sh 脚本:https://github.com/vishnubob/wait-for-it/blob/master/wait-for-it.sh
PS: 您可以使用以下命令查看任何图像的基本信息:
docker inspect <image-name>
详细信息: 我正在尝试使用 docker-compose.yml 文件 运行 wurstmeister/kafka and wurstmeister/zookeeper 图像,附加在这个post.
的底部为了测试容器,我遵循了official site of kafka。它指的是图像中不可用的某些脚本,例如 bin/kafka-server-start.sh
。我还尝试使用 docker exec -it zookeeper bash
和 docker exec -it kafka bash
遍历容器,并在 /bin/
目录中找到 zkServer.sh 和其他一些脚本。
问题:问题是我不知道如何使用它,因为config/server.properties在kafka容器而不是zookeeper中可用。所以我不知道正确的解决方案。下载脚本放到宿主机目录下复制到容器里是不是一个好的方案?
docker-compose.yml
version:'2'
services:
zookeeper:
image: wurstmeister/zookeeper
container_name: zookeeper
ports:
- "2181:2181"
kafka:
build: .
container_name: kafka
links:
- zookeeper
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: kafka
KAFKA_ADVERTISED_PORT: 9092
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_OPTS: -javaagent:/usr/app/jmx_prometheus_javaagent.jar=7071:/usr/app/prom-jmx-agent-config.yml
volumes:
- /var/run/docker.sock:/var/run/docker.sock
Dockerfile
FROM wurstmeister/kafka
ADD prom-jmx-agent-config.yml /usr/app/prom-jmx-agent-config.yml
ADD jmx_prometheus_javaagent-0.10.jar /usr/app/jmx_prometheus_javaagent.jar
您不必使用 bin/kafka-server-start.sh
脚本。 wurstmeister/kafka
图像中有一个名为 start-kafka.sh
的脚本。以下是我在我的一个项目中的做法:
docker-compose.yml
zookeeper:
container_name: zookeper
image: wurstmeister/zookeeper:3.4.6
ports:
- "2181:2181"
kafka:
container_name: kafka
build:
context: .
dockerfile: kafka.Dockerfile
image: kafka-service
ports:
- "9092:9092"
kafka.Dockerfile
FROM wurstmeister/kafka:2.11-2.0.0
COPY wait-for-it.sh /wait-for-it.sh
RUN chmod +x /wait-for-it.sh
CMD ["/wait-for-it.sh", "zookeper:2181", "--", "start-kafka.sh"]
在 dockerfile 中,我基本上说:"Wait for zookeeper, he has to be up first,then you can start, then after him, run start-kafka.sh
"。您可以在此处下载 wait-for-it.sh 脚本:https://github.com/vishnubob/wait-for-it/blob/master/wait-for-it.sh
PS: 您可以使用以下命令查看任何图像的基本信息:
docker inspect <image-name>