docker-compose up 不在主机目录中挂载卷

docker-compose up not mounting volumes in the host directory

我有 Ubuntu 20.04 机器,我的 docker 版本是 20.10.08。以下是我的 docker-compose 文件:


services:
  zookeeper:
    image: docker.io/bitnami/zookeeper:3.7
    ports:
      - "2181:2181"
    volumes:
      - "kafka-vol:/bitnami/kafka/config"
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes
  kafka:
    image: docker.io/bitnami/kafka:3
    ports:
      - "9092:9092"
    volumes:
      - "kafka-vol:/bitnami/kafka/config"
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
    depends_on:
      - zookeeper
volumes:
  kafka-vol:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /home/ned/advice/data/conf/kafka

我正在为 运行 容器使用 docker-compose。 运行 很好,没有错误,但我的 kafka 配置没有安装在主机目录中。到目前为止,我已经尝试了以下方法:

  1. 如 bitnami docker 图像文档中所述,允许对文件夹的权限 1001。
  2. 在卷
  3. 中给出了相对路径.advice/data/conf/kafka
  4. 直接在服务卷中给出完整路径(没有 中建议的双引号):
    image: docker.io/bitnami/kafka:3
    ports:
      - "9092:9092"
    volumes:
      - advice/data/conf/kafka:/bitnami/kafka/config

当我做的时候docker volume inspect kafka-vol。它给了我以下输出:

[
    {
        "CreatedAt": "2022-01-28T07:16:22Z",
        "Driver": "local",
        "Labels": {
            "com.docker.compose.project": "ned",
            "com.docker.compose.version": "2.2.3",
            "com.docker.compose.volume": "kafka-vol"
        },
        "Mountpoint": "/var/snap/docker/common/var-lib-docker/volumes/ned_kafka-vol/_data",
        "Name": "ned_kafka-vol",
        "Options": {
            "device": "/home/ned/advice/data/conf/kafka",
            "o": "bind",
            "type": "none"
        },
        "Scope": "local"
    }
]

现在,我不知道我做错了什么,它没有装载我的配置文件。目录 /home/ned/advice/data/conf/kafka 是空的。我期待在这个 /home/ned/advice/data/conf/kafka 目录 docker 的 kafka 配置

看起来这个容器中的这个目录是用来挂载外部配置文件的,它完全是空的。在他们的 env script.

中也称为 KAFKA_MOUNTED_CONF_DIR

所以如果你想挂载你自己的配置,他们可能是这样的。

mkdir config
echo foobar > config/config.txt
chown -R 1001:1001 config
  kafka:
    image: docker.io/bitnami/kafka:3
    ports:
      - "9092:9092"
    volumes:
      - "./config:/bitnami/kafka/config"
$ docker-compose up -d
$ docker exec -ti test_kafka_1 ls /bitnami/kafka/config
config.txt

正如@OneCricketeer 发现的那样,如果您想获取它正在使用的默认配置,您需要从 /opt/bitnami/kafka/config.

获取它

如果要将 Kafka 默认配置挂载到主机系统,则需要使用该路径。

version: "2"

services:
  zookeeper:
    image: docker.io/bitnami/zookeeper:3.7
    ports:
      - "2181:2181"
    volumes:
      - "zookeeper_data:/bitnami"
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes
  kafka:
    image: docker.io/bitnami/kafka:3
    ports:
      - "9092:9092"
    volumes:
      - "kafka_data:/bitnami"
      # the volume should be mounted to this path
      - "kafa_configs:/opt/bitnami/kafka/config"
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
    depends_on:
      - zookeeper

volumes:
  zookeeper_data:
    driver: local
  kafka_data:
    driver: local
  # this is your volume
  kafa_configs:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: ./config
$ mkidr config
$ sudo chown 1001:1001 config
$ docker compose up -d
ls -ltrh config/
total 76K
-rw-rw-r-- 1 root root 1.2K Jan 24 23:14 zookeeper.properties
-rw-rw-r-- 1 root root 1.2K Jan 24 23:14 trogdor.conf
-rw-rw-r-- 1 root root 1.1K Jan 24 23:14 tools-log4j.properties
-rw-rw-r-- 1 root root 4.6K Jan 24 23:14 log4j.properties
-rw-rw-r-- 1 root root 2.3K Jan 24 23:14 connect-standalone.properties
-rw-rw-r-- 1 root root 2.5K Jan 24 23:14 connect-mirror-maker.properties
-rw-rw-r-- 1 root root 2.1K Jan 24 23:14 connect-log4j.properties
-rw-rw-r-- 1 root root  881 Jan 24 23:14 connect-file-source.properties
-rw-rw-r-- 1 root root  883 Jan 24 23:14 connect-file-sink.properties
-rw-rw-r-- 1 root root 5.4K Jan 24 23:14 connect-distributed.properties
-rw-rw-r-- 1 root root  909 Jan 24 23:14 connect-console-source.properties
-rw-rw-r-- 1 root root  906 Jan 24 23:14 connect-console-sink.properties
drwxrwxr-x 2 root root 4.0K Jan 29 17:05 kraft
-rw-rw-r-- 1 root root 6.9K Jan 29 17:05 server.properties
-rw-rw-r-- 1 root root 1.9K Jan 29 17:05 producer.properties
-rw-rw-r-- 1 root root 1.3K Jan 29 17:05 consumer.properties

根据您这样做的原因,也许 cp command 就足够了。