基本上,我想要创建一个首先执行 Zookeeper 和 kafka 服务器的 Ubuntu 环境。
首先,我创建了一个 dockerfile,在其中定义 Ubuntu 环境:
FROM ubuntu:latest
RUN apt-get update && apt-get upgrade -y
RUN apt-get install -y openjdk-8-jdk
RUN apt-get install -y sudo
RUN apt-get install -y dub
RUN apt-get install -y wget rsync
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
RUN wget https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz
RUN tar -xvf kafka_2.13-3.7.0.tgz
RUN mkdir -p /home/servidor-kafka/kafka
RUN rsync -av --remove-source-files kafka_2.13-3.7.0/ /home/servidor-kafka/kafka/
RUN rm kafka_2.13-3.7.0.tgz
RUN wget https://downloads.apache.org/zookeeper/zookeeper-3.7.2/apache-zookeeper-3.7.2-bin.tar.gz
RUN tar -xvf apache-zookeeper-3.7.2-bin.tar.gz
RUN mkdir -p /home/servidor-kafka/zookeeper
RUN rsync -av --remove-source-files apache-zookeeper-3.7.2-bin/ /home/servidor-kafka/zookeeper/
RUN rm apache-zookeeper-3.7.2-bin.tar.gz
WORKDIR /home/servidor-kafka/kafka
EXPOSE 9092 2181
USER docker
CMD ["/bin/bash"]
然后我创建我的 docker-compose.yml,如下所示:
version: '3.8'
services:
zookeeper:
image: confluentinc/cp-zookeeper:latest
container_name: zookeeper
user: "1000:1000"
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 500
ports:
- 2181:2181
volumes:
- /home/servidor-kafka/zookeeper
kafka-broker-1:
image: confluentinc/cp-kafka:latest
container_name: kafka-broker-1
depends_on:
- zookeeper
user: "1000:1000"
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_INTERNAL:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092,PLAINTEXT_INTERNAL://broker:29092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
ports:
- "9092:9092"
volumes:
- /home/servidor-kafka/kafka
当我 docker 构建它时,我没有遇到任何问题,但是当我执行“docker-compose up”时,我得到:
/etc/confluent/docker/configure: line 40: dub: command not found
这很奇怪,因为我已经在 dockerfile 中
RUN apt-get install -y dub
了。
运行zookeeper和kafka时。
我可以获得一些反馈吗?谢谢你。
我减少了您
RUN
中 Dockerfile
语句的数量。这应该会给你一个层数更少的图像。
FROM ubuntu:latest
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y openjdk-8-jdk dub wget rsync
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
RUN wget https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz && \
tar -xvf kafka_2.13-3.7.0.tgz && \
mkdir -p /home/servidor-kafka/kafka && \
rsync -av --remove-source-files kafka_2.13-3.7.0/ /home/servidor-kafka/kafka/ && \
rm kafka_2.13-3.7.0.tgz
RUN wget https://downloads.apache.org/zookeeper/zookeeper-3.7.2/apache-zookeeper-3.7.2-bin.tar.gz && \
tar -xvf apache-zookeeper-3.7.2-bin.tar.gz && \
mkdir -p /home/servidor-kafka/zookeeper && \
rsync -av --remove-source-files apache-zookeeper-3.7.2-bin/ /home/servidor-kafka/zookeeper/ && \
rm apache-zookeeper-3.7.2-bin.tar.gz
WORKDIR /home/servidor-kafka/kafka
EXPOSE 9092 2181
USER docker
CMD ["/bin/bash"]
但这并不能解决你的问题。正如 David Maze 在评论中指出的那样,您的
docker-compose.yml
文件没有引用 Dockerfile
,因此使用 docker-compose up
,您实际上只是运行那里提到的两个预构建图像。
您是否计划使用
Dockerfile
运行其他服务?或者您打算使用 Dockerfile
来替换其中一项或两项服务?
也不清楚
dub
正在哪里运行。我使用上面更新的 Dockerfile
构建了图像并运行 dub
正常(它确实抱怨没有找到包清单,但找到了实际的 dub
命令!)。
您需要提供更多信息,以便我们重现您的问题。