compose 文件的配置部分不适用于 docker compose up

问题描述 投票:0回答:0

我正在尝试使用 RabbitMQ 的 docker 镜像:

rabbitmq:3.11.6
与 docker compose。一切都按预期工作,但现在我必须更改 RabbitMQ 的默认设置。

根据 RabbitMQ 的文档,在这种情况下,设置是从

/etc/rabbitmq/conf.d
目录解析的。最简单的方法是向图像中注入一个文件,这样它就会在启动时由 RabbitMQ 加载。为了测试它,我根据
rabbitmq:3.11.6
添加新文件制作了一个新图像,它工作正常:

FROM rabbitmq:3.11.6
COPY --chown=rabbitmq:rabbitmq --chmod=0664 rabbitmq.conf /etc/rabbitmq/conf.d/20-consumer_timeout.conf

有了这个,额外的文件在启动时被 RabbitMQ 成功加载:

rabbit-1  |  Config file(s): /etc/rabbitmq/conf.d/10-defaults.conf
rabbit-1  |                  /etc/rabbitmq/conf.d/20-consumer_timeout.conf
rabbit-1  |                  /etc/rabbitmq/conf.d/management_agent.disable_metrics_collector.conf

但是,如果我能避免仅仅为了向图像注入额外文件而构建新图像,那将非常方便。我找到了撰写文件参考的 config 部分,但我无法让它与

docker compose up
命令一起工作。好像文件是在RabbitMQ服务器启动后注入到容器中的,因为它并没有加载它。此外,UID、GID 和权限设置将被忽略。

compose文件的配置机制可以和

docker compose up
一起使用吗?

我在 Windows 11 上使用 WSL2 和 Docker Desktop v4.17.0:

  • Docker 版本 23.0.0,构建 e92dd87

  • Docker Compose 版本 v2.15.1

为了在不构建 RabbitMQ 的新图像的情况下使用撰写文件,我添加了一个配置部分并将其用于相关服务(删除了不相关的部分):

version: "3.9"

configs:
  rabbitmq_consumer_timeout_conf:
    file: ./docker/rabbit/rabbitmq.conf

services:
  manager: {...}
  worker: {...}
  rabbit:
    image: "rabbitmq:3.11.6"
    hostname: rabbit
    configs:
      - source: rabbitmq_consumer_timeout_conf
        target: /etc/rabbitmq/conf.d/20-consumer_timeout.conf
        uid: "999"
        gid: "999"
        mode: 0440

不幸的是,如果此配置以

docker compose up
启动,RabbitMQ 不会列出额外的配置文件:

rabbit-1  |  Config file(s): /etc/rabbitmq/conf.d/10-defaults.conf
rabbit-1  |                  /etc/rabbitmq/conf.d/management_agent.disable_metrics_collector.conf

/etc/rabbitmq/conf.d/20-consumer_timeout.conf
文件存在于正在运行的容器中,但是:

  • UID 和 GID 都是 1000,这是来自主机(WSL2)的值,因此忽略

    uid
    gid
    设置。

  • 模式为 777,这也是主机系统 (/mnt/c/...) 的值,因此

    mode
    设置也被忽略。

  • 我修改了提到的Dockerfile,看看RabbitMQ是否会加载带有上述

    uid
    gid
    mode
    的配置文件并且它成功加载了它,所以似乎配置文件没有及时复制到那里。

docker-compose
© www.soinside.com 2019 - 2024. All rights reserved.