我们使用 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
文档指定配置不可写。摘录如下:
配置无法写入,因为它们安装在临时文件中 文件系统,因此如果您设置可写位,它将被忽略。
参考:https://docs.docker.com/compose/compose-file/
您可以旋转配置,以下是一个示例:https://docs.docker.com/engine/swarm/configs/#example-rotate-a-config
一个可能的解决方案是将配置文件夹安装为卷。由于您只能像这样挂载文件夹,因此源配置文件和目标配置文件需要具有相同的名称。
services:
zookeeperDelta:
...
volumes:
- zookeeper_conf_folder:/conf
...
volumes:
zookeeper_conf_folder:
driver: local
driver_opts:
type: 'none'
o: 'bind'
device: './zookeeper/cfg'
请注意,这样主机系统上的源配置也将被覆盖!