docker 怎么配置变量

2021-10-19 14:37:05 +08:00
 awanganddong
version: '3'
services:
  es01:
    container_name: es01
    image: elasticsearch:7.14.1
    restart: always
    environment:
      - "ES_JAVA_OPTS=-Xms8g -Xmx8g"
    volumes:
      - ${ROOT}/es/node1/es.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - ${ROOT}/es/node1/logs/:/usr/share/elasticsearch/logs
      - ${ROOT}/es/node1/ik:/usr/share/elasticsearch/plugins/ik
    ports:
      - 9200:9200
    networks:
      - es_network
  kibana:
    container_name: kibana
    image: docker.elastic.co/kibana/kibana:7.14.1
    restart: always
    ports:
      - 5601:5601
    volumes:
      - ${ROOT}/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml
    //environment:
    //  ELASTICSEARCH_URL: http://es01:9200
    //  ELASTICSEARCH_HOSTS: '["http://es01:9200"]'  
    networks:
      - es_network
    depends_on:
      - es01
networks:
  es_network:
    driver: bridge

docker-compose 文件是这样的,kibana.yml 里边有配置 elasticsearch.hosts 。 现在是直接在 kibana.yml 文件内修改。现在怎么才能将该参数配置为变量。 在 docker-compose 同时配置 environment 没有生效。只设置 environment 可以生效。

现在需求就是可配置化,即在.env 中可以配置 kibana.yml 的值 这个怎么操作

1288 次点击
所在节点    程序员
8 条回复
AoEiuV020
2021-10-19 14:44:34 +08:00
一般都是不直接调用 docker-compose,单独开个脚本,脚本里普通的 export 处理参数之类变量,脚本最后调用 docker-compose,
awanganddong
2021-10-19 14:48:26 +08:00
@AoEiuV020 现在我是想把其收敛到.env 配置里边
AoEiuV020
2021-10-19 15:01:53 +08:00
@awanganddong 不管收到哪里,都可以在脚本里读取之后调用 docker-compose,
我想说的是不管 docker-compose 能不能做到,封装一层脚本这个自由度都是大大提升的,
AoEiuV020
2021-10-19 15:07:35 +08:00
@awanganddong 突然感觉有点没明白你是要哪部分可配置,
看你配置文件里有${ROOT}说明应该是知道在 yml 里使用环境变量的吧,
需要变的部分改引用环境变量然后通过脚本读取配置文件传值进来不就可以了,
awanganddong
2021-10-19 15:19:52 +08:00
@AoEiuV020
这是我在 kibana.yml 里边的配置,直接写死了。
现在要部署一套正式,一套测试,所以想把 elasticsearch.hosts 变成变量。
我直接在 yml 文件把 elasticsearch.hosts 注释,然后在 docker-compose 里边增加
//environment:
// ELASTICSEARCH_URL: http://es01:9200
// ELASTICSEARCH_HOSTS: '["http://es01:9200"]'

但是还是不可以,
所以想知道怎么处理。

```
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: [ "http://xxx.xxx.xxx.xxx:9200" ]
i18n.locale: "zh-CN"
````
AoEiuV020
2021-10-19 15:36:04 +08:00
@awanganddong 听起来感觉直接 env_file 就可以,
如果不行的话会不会是 kibana 的问题?是否确定过 kibana 读取的是“环境变量”?
如果 kibana 只能读取 yml,那你当然只能在 yml 里配置那个 hosts 了,
需要改的话可以在 kibana 运行前通过 entrypoint 跑个脚本读取环境变量 sed 修改一下 yml 文件,
awanganddong
2021-10-19 15:39:45 +08:00
@AoEiuV020 这样的话,又复杂了,我打算直接用分支区分正式和测试配置文件。
感谢你的思路
imherer
2021-10-19 17:10:34 +08:00
看官方文档: https://www.elastic.co/guide/en/elastic-stack-get-started/current/get-started-docker.html

ELASTICSEARCH_HOSTS 环境变量应该没错

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/808880

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX