【问题标题】:docker-compose up not mounting volumes in the host directorydocker-compose up 不在主机目录中安装卷
【发布时间】:2022-01-30 00:15:30
【问题描述】:

我有 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. 在卷中提供相对路径.advice/data/conf/kafka
  3. 在服务卷中直接给出完整路径(不带Docker Volume not mounting any files 中建议的双引号):
    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 配置

【问题讨论】:

  • 是你当前目录中的 bitnami 文件夹吗?如果是这样,试试 => kafka-vol:./bitnami/kafka/config(只是加了一个点)&我也希望你没有在卷绑定中使用引号(“)
  • 你到底想做什么?服务器属性是从容器内部的模板生成的。您尝试设置硬编码配置是否有特定原因?挂载卷将覆盖容器路径,而不是将该路径中的数据复制到容器外

标签: docker apache-kafka docker-compose


【解决方案1】:

看起来这个容器中的这个目录是用来挂载外部配置文件的,它完全是空的。在他们的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 可能就足够了。

【讨论】:

  • 虽然这可行,但似乎 OP 希望容器在主机中创建文件,而不是其他方式
  • @OneCricketeer,在这个目录中,容器启动时没有文件,我已经检查过了。所以从逻辑上讲,不会向主机写入任何内容。我假设它们最终会出现在/bitnami/kafka/data 中,如果您想保留数据,文档建议安装完整的/bitnami/kafka。也许他们最终会通过 zooker 来,我对 kafka 了解不够。 OP 应首先检查在基本设置中某些内容是否最终会在此目录中。如果他们能证明是这种情况,那么我们可以进一步排除故障。在文档的设置中,它没有发生。
  • 我尝试过使用文档 github.com/bitnami/… 中的 compose。
  • 首先我的回答有点像你的评论所说的,你可以在编辑历史中看到它。但后来我想,我可能误解了OP。通常我们想挂载配置文件而不是将它们从容器中取出。
  • 可能是因为配置文件位于/opt/bitnami/kafka/config?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
  • 2017-04-15
  • 2018-03-25
  • 1970-01-01
  • 2015-08-18
相关资源
最近更新 更多