Docker Compose/Stack 配置可写

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

我们使用 dockers 配置功能将配置推送到集群(swarm)中的不同节点。我们通过在 docker-compose 文件中指定它来做到这一点。不幸的是,这会导致该文件是只读的。有没有办法解决这个问题,或者以 docker 容器仍然可以覆盖其中一部分的方式将自定义配置推送到服务器?

例如

  zookeeperDelta:
    image: zookeeper
    restart: always
    hostname: zookeeperDelta
    ports:
      - 2183:2181
    configs:
      - source: zookeeper_cfg
        target: /conf/zoo.cfg
        gid: '1000'
        uid: '1000'
        mode: 0777
    volumes:
      - /var/zookeeper/logs:/logs
      - /var/zookeeper/data:/data
      - /var/zookeeper/datalog:/datalog
    environment:
      ZOO_MY_ID: 3
      ZOO_LOG4J_PROP: INFO,ROLLINGFILE
      ZOO_SERVERS: server.1=zookeeperAlpha:2888:3888;2181 server.2=zookeeperBeta:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181
    deploy:
      replicas: 1
      placement:
        constraints:
          - node.hostname == zookeeperDelta
docker docker-compose docker-swarm
2个回答
1
投票

文档指定配置不可写。摘录如下:

配置无法写入,因为它们安装在临时文件中 文件系统,因此如果您设置可写位,它将被忽略。

参考:https://docs.docker.com/compose/compose-file/

您可以旋转配置,以下是一个示例:https://docs.docker.com/engine/swarm/configs/#example-rotate-a-config


0
投票

一个可能的解决方案是将配置文件夹安装为卷。由于您只能像这样挂载文件夹,因此源配置文件和目标配置文件需要具有相同的名称。

services:
  zookeeperDelta:
    ...
    volumes:
      - zookeeper_conf_folder:/conf
    ...
volumes:
  zookeeper_conf_folder:
    driver: local
    driver_opts:
      type: 'none'
      o: 'bind'
      device: './zookeeper/cfg'

请注意,这样主机系统上的源配置也将被覆盖!

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