Это сводится к взаимодействию между томами (как заявлено в Dockerfile ) и томом, который вы пытаетесь связать как часть Docker Compose .
Если вы проверите Dockerfile каждого контейнера, вы увидите, что у него есть объявленные тома, что вы также можете увидеть из его проверки. Вот как это выглядит при использовании вашей конфигурации:
➜ docker inspect zookeeper|jq '.[].Mounts[] | .Type ,.Destination'
"volume"
"/etc/zookeeper/secrets"
"bind"
"/var/lib/zookeeper"
"volume"
"/var/lib/zookeeper/log"
"volume"
"/var/lib/zookeeper/data"
Вы заметите, что есть два тома (которые объявлены в самом образе, то есть из файла Docker) по указанным c путям данных для ZK
/var/lib/zookeeper/log
/var/lib/zookeeper/data
Дополнительно , имеется крепление для крепления от Docker Составьте:
Эти пункты sh, которые объясняют проблему, которую вы видите.
Аналогичный шаблон существует для брокера.
Короче говоря, вам нужно смонтировать локальный каталог хоста для специфика c тома в образе:
---
version: '3'
services:
zookeeper:
image: confluentinc/cp-zookeeper:5.4.1
hostname: zookeeper
container_name: zookeeper
ports:
- "2181:2181"
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
volumes:
- ./zoo/data:/var/lib/zookeeper/data
- ./zoo/log:/var/lib/zookeeper/log
broker:
image: confluentinc/cp-kafka:5.4.1
hostname: broker
container_name: broker
depends_on:
- zookeeper
ports:
- "9092:9092"
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker:29092,PLAINTEXT_HOST://localhost:9092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
volumes:
- ./broker/data:/var/lib/kafka/data
После этого мы можно увидеть, что в путях контейнера нет конфликтов:
➜ docker inspect zookeeper|jq '.[].Mounts '
[
{
"Type": "bind",
"Source": "/private/tmp/zoo/log",
"Destination": "/var/lib/zookeeper/log",
"Mode": "rw",
"RW": true,
"Propagation": "rprivate"
},
{
"Type": "bind",
"Source": "/private/tmp/zoo/data",
"Destination": "/var/lib/zookeeper/data",
"Mode": "rw",
"RW": true,
"Propagation": "rprivate"
},
{
"Type": "volume",
"Name": "6cbb584e0d9aa2f119869b264544f587909d9f417fc553a7bb2954dd28ecb8ea",
"Source": "/var/lib/docker/volumes/6cbb584e0d9aa2f119869b264544f587909d9f417fc553a7bb2954dd28ecb8ea/_data",
"Destination": "/etc/zookeeper/secrets",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
]
и данные из контейнеров:
➜ docker exec zookeeper ls -l /var/lib/zookeeper/data /var/lib/zookeeper/log
/var/lib/zookeeper/data:
total 0
drwxr-xr-x 3 root root 96 Apr 3 08:59 version-2
/var/lib/zookeeper/log:
total 0
drwxr-xr-x 3 root root 96 Apr 3 08:59 version-2
➜ docker exec broker ls -l /var/lib/kafka/data
total 16
drwxr-xr-x 6 root root 192 Apr 3 08:59 __confluent.support.metrics-0
-rw-r--r-- 1 root root 0 Apr 3 08:59 cleaner-offset-checkpoint
-rw-r--r-- 1 root root 4 Apr 3 09:01 log-start-offset-checkpoint
-rw-r--r-- 1 root root 88 Apr 3 08:59 meta.properties
-rw-r--r-- 1 root root 36 Apr 3 09:01 recovery-point-offset-checkpoint
-rw-r--r-- 1 root root 36 Apr 3 09:02 replication-offset-checkpoint
-rw-r--r-- 1 root root 0 Apr 3 08:30 wibble
хранятся на локальном хосте:
➜ ls -l broker/data zoo/data zoo/log
broker/data:
total 32
drwxr-xr-x 6 rmoff wheel 192 3 Apr 09:59 __confluent.support.metrics-0
-rw-r--r-- 1 rmoff wheel 0 3 Apr 09:59 cleaner-offset-checkpoint
-rw-r--r-- 1 rmoff wheel 4 3 Apr 10:00 log-start-offset-checkpoint
-rw-r--r-- 1 rmoff wheel 88 3 Apr 09:59 meta.properties
-rw-r--r-- 1 rmoff wheel 36 3 Apr 10:00 recovery-point-offset-checkpoint
-rw-r--r-- 1 rmoff wheel 36 3 Apr 10:01 replication-offset-checkpoint
-rw-r--r-- 1 rmoff wheel 0 3 Apr 09:30 wibble
zoo/data:
total 0
drwxr-xr-x 3 rmoff wheel 96 3 Apr 09:59 version-2
zoo/log:
total 0
drwxr-xr-x 3 rmoff wheel 96 3 Apr 09:59 version-2
См. Также Тома данных для Kafka и ZooKeeper