如何将Docker-compose中的环境变量传递给Spring Cloud Data Flow Task?
问题根因
你执行task create命令时,单引号包裹的$MY_ENV不会被当前执行shell解析,同时Spring Cloud Data Flow(SCDF)默认不会自动将自身进程的环境变量透传给下游启动的任务容器,所以最终任务拿到的变量值是空的。
解决方案
方案1:全局透传指定环境变量(推荐)
通过修改SCDF服务端配置,指定需要透传给所有任务的环境变量,适合需要批量透传变量的场景。
- 修改docker-compose.yml中dataflow-server的environment配置,新增透传规则:
dataflow-server: image: springcloud/spring-cloud-dataflow-server:${DATAFLOW_VERSION:-2.8.1} container_name: dataflow-server ports: - "${DATAFLOW_EXTERNAL_PORT}:9393" environment: ... - MY_ENV=foo # 新增配置:指定要透传给任务的环境变量名,多个用逗号分隔 - SPRING_CLOUD_DATAFLOW_TASK_TASKPLATFORMLOCAL_ENVIRONMENTVARIABLES_INCLUDE=MY_ENV depends_on: - rabbitmq - skipper-server restart: always volumes: - ${HOST_MOUNT_PATH:-.}:${DOCKER_MOUNT_PATH:-/home/cnb/scdf}
- 重启dataflow-server容器后,重新创建任务即可,变量会自动透传给任务:
task create dummy-task --definition 'dummy --MY_ENV_FOR_TASK=${MY_ENV}' --description 'dummy task for test'
方案2:创建/启动任务时显式传参
适合仅单个任务需要用到变量的场景,不需要修改SCDF服务端配置。
如果是执行shell的环境中已经存在该变量,可以把命令的单引号换成双引号让shell提前解析变量:
export MY_ENV=foo task create dummy-task --definition "dummy --MY_ENV_FOR_TASK=$MY_ENV" --description 'dummy task for test'
也可以在启动任务时通过--properties参数直接指定任务变量:
task launch dummy-task --properties "app.dummy.MY_ENV_FOR_TASK=foo"
内容的提问来源于stack exchange,提问作者Kambei
相关产品推荐
相关产品推荐

