V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
awanganddong
V2EX  ›  程序员

docker 怎么配置变量

  •  
  •   awanganddong · 2021-10-19 14:37:05 +08:00 · 1300 次点击
    这是一个创建于 1142 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 的值 这个怎么操作

    8 条回复    2021-10-19 17:10:34 +08:00
    AoEiuV020
        1
    AoEiuV020  
       2021-10-19 14:44:34 +08:00
    一般都是不直接调用 docker-compose,单独开个脚本,脚本里普通的 export 处理参数之类变量,脚本最后调用 docker-compose,
    awanganddong
        2
    awanganddong  
    OP
       2021-10-19 14:48:26 +08:00
    @AoEiuV020 现在我是想把其收敛到.env 配置里边
    AoEiuV020
        3
    AoEiuV020  
       2021-10-19 15:01:53 +08:00
    @awanganddong 不管收到哪里,都可以在脚本里读取之后调用 docker-compose,
    我想说的是不管 docker-compose 能不能做到,封装一层脚本这个自由度都是大大提升的,
    AoEiuV020
        4
    AoEiuV020  
       2021-10-19 15:07:35 +08:00
    @awanganddong 突然感觉有点没明白你是要哪部分可配置,
    看你配置文件里有${ROOT}说明应该是知道在 yml 里使用环境变量的吧,
    需要变的部分改引用环境变量然后通过脚本读取配置文件传值进来不就可以了,
    awanganddong
        5
    awanganddong  
    OP
       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
        6
    AoEiuV020  
       2021-10-19 15:36:04 +08:00
    @awanganddong 听起来感觉直接 env_file 就可以,
    如果不行的话会不会是 kibana 的问题?是否确定过 kibana 读取的是“环境变量”?
    如果 kibana 只能读取 yml,那你当然只能在 yml 里配置那个 hosts 了,
    需要改的话可以在 kibana 运行前通过 entrypoint 跑个脚本读取环境变量 sed 修改一下 yml 文件,
    awanganddong
        7
    awanganddong  
    OP
       2021-10-19 15:39:45 +08:00
    @AoEiuV020 这样的话,又复杂了,我打算直接用分支区分正式和测试配置文件。
    感谢你的思路
    imherer
        8
    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 环境变量应该没错
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5554 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 01:33 · PVG 09:33 · LAX 17:33 · JFK 20:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.