• docker-compose的环境变量指令怎么添加数组类型的环境变量


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 Hobart-Ljw 2024-04-15 10:59 采纳率: 25% 浏览 2 首页/ 开发工具 / docker-compose的环境变量指令怎么添加数组类型的环境变量 dockerspring cloud容器 我有spring.cloud.inetutils.ignored-interfaces 和 spring.cloud.inetutils.preferred-networks两个数组类型的参数。 docker-compose的environment指令下怎么去兼容数组类型的环境变量呢?我想在docker-compose下部署的时候动态修改spring.cloud.inetutils.ignored-interfaces 和 spring.cloud.inetutils.preferred-networks的值。 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    4条回答 默认 最新

    • 码农阿豪 Java领域优质创作者 2024-04-15 10:59
      关注
      让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
      可以使用下面的格式兼容数组类型的环境变量:
      environment:
        - spring.cloud.inetutils.ignored-interfaces=interface1,interface2
        - spring.cloud.inetutils.preferred-networks=192.168.0.0/16,172.16.0.0/12
      

      以上示例中,使用逗号分隔不同的接口或网络地址,等同于使用数组类型的参数。在启动容器时,这些环境变量的值会被注入进应用程序的运行环境中。 如果需要动态修改这些值,可以通过docker-compose的restart指令重启容器来实现。例如,下面的docker-compose文件定义了两个服务app1app2app1启动后等待30秒后再修改环境变量值,之后通过docker-compose restart命令重启容器,可以看到环境变量已经被更新:

      version: "3.9"
      services:
        app1:
          build: .
          environment:
            - spring.cloud.inetutils.ignored-interfaces=interface1
            - spring.cloud.inetutils.preferred-networks=192.168.0.0/16
          command: >
            /bin/bash -c "
              echo 'app1 started';
              sleep 30;
              export spring.cloud.inetutils.ignored-interfaces=interface2;
              export spring.cloud.inetutils.preferred-networks=172.16.1.0/24;
              echo 'app1 updated';
              sleep infinity"
        app2:
          build: .
          environment:
            - spring.cloud.inetutils.ignored-interfaces=interface2
            - spring.cloud.inetutils.preferred-networks=172.16.1.0/24
          command: /bin/bash -c "echo 'app2 started'; sleep infinity"
      

      注意,更新环境变量后需要等待一段时间再重启容器,确保应用程序能够成功读取新的值。如果立即重启容器,可能会导致应用程序读取到旧的环境变量值。

      展开全部

      评论
    • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-15 10:59
      关注

      引自免费微信小程序:皆我百晓生

      要在 docker-compose.yml 文件中设置数组类型的环境变量,你需要将它们写成逗号分隔的字符串。对于你提供的例子,可以这样配置:

      version: '3'
      
      services:
        your_service_name:
          image: your_image_name
          environment:
            - "SPRING_CLOUD_INETUTILS_IGNORED_INTERFACES=-eth.*, -eta.*"
            - "SPRING_CLOUD_INETUTILS_PREFERRED_NETWORKS=-10.0.29, -10.0.33"
      

      注意这里使用了等号 - 来定义环境变量,并且每个数组项之间用逗号 , 分隔。同时,由于 YAML 中的键名是大小写敏感的,所以你需要确保环境变量名与应用所期望的一致,例如 SPRING_CLOUD_INETUTILS_IGNORED_INTERFACESSPRING_CLOUD_INETUTILS_PREFERRED_NETWORKS

      如果你想在运行时动态地修改这些值,你可以在启动容器时通过命令行选项传递环境变量,例如:

      docker-compose up -d --scale your_service_name=2 \
        --env SPRING_CLOUD_INETUTILS_IGNORED_INTERFACES='-eth.*, -new_interface*' \
        --env SPRING_CLOUD_INETUTILS_PREFERRED_NETWORKS='-10.0.29, -10.0.34'
      

      这将会覆盖 docker-compose.yml 文件中的默认值。如果你想要在多个服务中共享这些环境变量,你可以考虑创建一个 .env 文件并将其包含到 docker-compose.yml 中,这样可以更好地管理环境变量。例如:

      .env 文件:

      SPRING_CLOUD_INETUTILS_IGNORED_INTERFACES=-eth.*, -eta.*
      SPRING_CLOUD_INETUTILS_PREFERRED_NETWORKS=-10.0.29, -10.0.33
      

      docker-compose.yml 文件:

      version: '3'
      env_file: .env
      
      services:
        your_service_name:
          image: your_image_name
          # No need to specify environment here as they are read from .env
      

      然后在启动时,只需执行 docker-compose up -d 即可。如果你需要在运行时动态更改 .env 文件中的值,只需要编辑文件后重新运行 docker-compose up -d 就可以加载新的环境变量。

      展开全部

      评论
    • GISer Liu 2024-04-15 11:02
      关注

      该回答引用自GPT-3.5,由博主GISer Liu编写:

      针对你的问题,我会提供一个基于 Docker Compose 的解决方案,允许你动态修改 Spring Boot 应用程序中的数组类型环境变量。
      首先,我们需要在 Docker Compose 文件中定义这些环境变量,并使用 environment 字段。但是,Docker
      Compose 不直接支持数组类型的环境变量,所以我们需要对这些环境变量进行字符串处理,然后在容器启动时解析成数组。
      以下是一个示例 Docker Compose 文件:
      yamlCopy code

      version: '3'
      services:
      your_service:
      image: your_image:tag
      environment:
      - SPRING_CLOUD_INETUTILS_IGNORED_INTERFACES=eth0,eth1
      - SPRING_CLOUD_INETUTILS_PREFERRED_NETWORKS=192.168.1.0/24,10.0.0.0/24
      command: ["sh", "-c", "java -jar your_application.jar"]
      

      在这个示例中,我们将 SPRING_CLOUD_INETUTILS_IGNORED_INTERFACESSPRING_CLOUD_INETUTILS_PREFERRED_NETWORKS 的值设置为字符串,每个值用逗号分隔。
      然后,在 Spring Boot
      应用程序中,你需要编写代码来解析这些环境变量并将它们转换为数组。你可以在应用程序的配置中定义这些属性,并在启动时从环境变量中读取和解析它们。
      下面是一个 Java Spring Boot 应用程序中解析这些环境变量的示例代码:
      javaCopy code

      import org.springframework.beans.factory.annotation.Value;
      import org.springframework.boot.SpringApplication;
      import org.springframework.boot.autoconfigure.SpringBootApplication;
      import org.springframework.context.annotation.Bean;
      import org.springframework.util.StringUtils;
      import java.util.Arrays;
      import java.util.List;
      @SpringBootApplication
      public class YourApplication {
      @Value("${SPRING_CLOUD_INETUTILS_IGNORED_INTERFACES}")
      private String ignoredInterfacesString;
      @Value("${SPRING_CLOUD_INETUTILS_PREFERRED_NETWORKS}")
      private String preferredNetworksString;
      public static void main(String[] args) {
      SpringApplication.run(YourApplication.class, args);
      }
      @Bean
      public List<String> ignoredInterfaces() {
      return Arrays.asList(StringUtils.commaDelimitedListToStringArray(ignoredInterfacesString));
      }
      @Bean
      public List<String> preferredNetworks() {
      return Arrays.asList(StringUtils.commaDelimitedListToStringArray(preferredNetworksString));
      }
      }
      

      在这个示例中,我们使用 @Value 注解来注入环境变量的值,并将它们转换为字符串。然后,通过 StringUtils.commaDelimitedListToStringArray 方法将字符串解析成数组。最后,我们将这些数组作为 Bean
      注入到 Spring 容器中。
      通过这种方式,你就可以在 Docker Compose 中动态修改 Spring Boot 应用程序中的数组类型环境变量了。

      如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

      展开全部

      评论
    • Kwan的解忧杂货铺 Java领域优质创作者 2024-04-16 14:23
      关注

      下午好🌅🌅🌅
      本答案参考ChatGPT-3.5

      好的,针对你的问题,以下是解决方案:

      1. 在docker-compose.yaml中使用environment指令,可以为容器内设置环境变量,包括数组类型的环境变量。

      2. 数组类型的环境变量可以用逗号分隔符或者空格分隔符设置,如下:

      environment:
        - IGNORED_INTERFACES=eth.*, eta.*
        - PREFERRED_NETWORKS=10.0.29, 10.0.33
      
      1. 如果想在部署的时候动态修改数组类型的环境变量,可以使用docker-compose的run指令来执行容器内的命令,并设置环境变量,如下:
      docker-compose run --rm mycontainer sh -c 'export IGNORED_INTERFACES="eth.*, eno.*" && export PREFERRED_NETWORKS="192.168.1.0/24, 10.1.1.0/24" && ./myapp.sh'
      

      其中mycontainer是docker-compose.yaml中定义的容器名字,myapp.sh是容器内的脚本文件,可以根据实际情况替换。

      1. 如果需要在docker-compose.yaml中使用数组类型的环境变量,并且需要动态修改,可以使用entrypoint指令,指定容器的入口脚本文件,并在脚本中设置环境变量,如下:
      entrypoint: /usr/local/bin/entrypoint.sh
      

      在entrypoint.sh中设置环境变量:

      #!/bin/sh
      
      export IGNORED_INTERFACES="eth.*, eno.*"
      export PREFERRED_NETWORKS="192.168.1.0/24, 10.1.1.0/24"
      
      # 启动应用
      ./myapp.sh
      
      1. 启动docker-compose容器时,可以使用-e参数设置环境变量,如下:
      docker-compose up -d --build -e IGNORED_INTERFACES="eth.*, eno.*" -e PREFERRED_NETWORKS="192.168.1.0/24, 10.1.1.0/24"
      

      其中-e参数用来设置环境变量,可以将动态修改的环境变量写在这里。

      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    【运维工具】当你的老板站在你背后,看你处理故障......
    CentOS 搭建k8s
    Linux开发工具:vim的介绍和用法及其简单配置
    嵌入式系统开发笔记108:IO的使用方法与面向对象程序设计
    vue3实现懒加载
    【Go blog】Govulncheck v1.0.0 发布了!
    营商环境评估流程解析——基于世行营商环境评估体系
    使用VMware安装linux虚拟机
    你知道分库分表怎么无限扩容吗?
    抓包后使用postman访问出错,后端报错 MalformedJsonException: Unterminated string
  • 原文地址:https://ask.csdn.net/questions/8088680