You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过Rancher Compose传递环境变量,让Spring Boot加载指定Profile

问题分析与解决方案

咱们一步步拆解你遇到的问题,逐个调整后就能让环境变量正常生效了:

1. Dockerfile里的两处关键错误

  • Jar文件名存在多余空格:你的ENTRYPOINT里写的是docker- sample-example.jar,中间多了一个空格,这会导致Java无法找到正确的Jar包,先把这个空格去掉,改成docker-sample-example.jar
  • ENTRYPOINT的变量解析逻辑问题:你用了exec形式的ENTRYPOINT(数组格式),这种方式不会通过shell解析环境变量,所以${environment}无法被替换成实际值。如果想保留exec形式,需要用sh -c包裹命令;或者直接改用shell形式的ENTRYPOINT。

修正后的Dockerfile可以二选一:

方案一:改用shell形式ENTRYPOINT

FROM openjdk:8
ENV environment default
ADD target/docker-sample-example.jar docker-sample-example.jar
EXPOSE 8087
ENTRYPOINT java -jar -Dspring.profiles.active=${environment} docker-sample-example.jar

方案二:保留exec形式但通过shell解析变量

FROM openjdk:8
ENV environment default
ADD target/docker-sample-example.jar docker-sample-example.jar
EXPOSE 8087
ENTRYPOINT ["sh", "-c", "java -jar -Dspring.profiles.active=${environment} docker-sample-example.jar"]

2. Docker-compose里的环境变量格式错误

你当前的environment配置里,- environment = dev存在多余空格,docker-compose不识别这种格式,必须去掉等号两边的空格,改成以下两种写法之一:

写法一:短格式(无空格)

version: "2"
services:
  svc-get-interactions:
    image: myaccount.dkr.ecr.ap-southeast-2.amazonaws.com/app:latest
    environment:
      - environment=dev  # 去掉等号两边的空格
    ports:
      - 9898:8082/tcp
    labels:
      io.rancher.container.pull_image: always

写法二:键值对格式

version: "2"
services:
  svc-get-interactions:
    image: myaccount.dkr.ecr.ap-southeast-2.amazonaws.com/app:latest
    environment:
      environment: dev  # 标准键值对写法
    ports:
      - 9898:8082/tcp
    labels:
      io.rancher.container.pull_image: always

3. 通过Bamboo传递环境变量到Rancher

如果要通过Bamboo的环境变量传递值,有两种常用方式:

  • 命令行注入:在Bamboo的部署任务中,直接通过命令传递变量:
environment=prod rancher-compose up -d

Rancher Compose会自动把这个变量传递给容器,覆盖Dockerfile里的默认值。

  • docker-compose引用Bamboo变量:在docker-compose中直接引用Bamboo已设置的环境变量:
version: "2"
services:
  svc-get-interactions:
    image: myaccount.dkr.ecr.ap-southeast-2.amazonaws.com/app:latest
    environment:
      - environment=${BAMBOO_ENVIRONMENT_VAR}  # 替换为你在Bamboo中定义的变量名
    ports:
      - 9898:8082/tcp
    labels:
      io.rancher.container.pull_image: always

只要Bamboo中存在对应的变量,docker-compose会自动完成替换。

做完这些调整后,重新构建镜像(如果修改了Dockerfile),再执行rancher-compose up,容器启动时就会加载对应环境的Spring配置文件了。

内容的提问来源于stack exchange,提问作者bhaskar srinivas

火山引擎 最新活动