如何从Jenkins任务向docker run命令传递环境变量
解决方案
优先使用env_file传递环境变量的配置方法
- 首先确认
env_settings.env格式合规:每行使用KEY=VALUE格式,键值对两侧不要加多余空格,不需要额外加引号(除非变量值本身需要包含引号),注释行以#开头即可。 - 在
docker run参数中添加--env-file指定配置文件路径,你已经将文件复制到当前工作目录,直接添加参数即可,修改后的run命令示例:
docker run \ -d --restart unless-stopped \ --env-file ./env_settings.env \ -e CLIENT_URL='https://test.customer.app' \ -e SITE_NAME='My best site' \ --name customer_front${stagePrefix} \ -p ${externalPort}:3000 \ customer_front${stagePrefix}
- 验证参数生效:容器启动后执行
docker exec customer_front${stagePrefix} env,可直接查看容器内的环境变量列表,确认变量是否正确注入,避免直接通过应用读取结果判断是否生效。
单变量直接传参不生效的排查
- 当前写法
-e DEFAULT_LOCALE=$DEFAULT_LOCALE是从执行docker命令的shell环境中读取变量值,需要先确认Jenkins任务执行上下文里对应变量是否已赋值,可在run命令前添加echo $DEFAULT_LOCALE $COUNTRY $CURRENCY打印变量值排查。 - 如果变量存储在
env_settings.env中,需要取消你注释掉的source env_settings.env行的注释,加载env文件到当前shell环境后,才能通过$变量名读取到对应值。
常见踩坑说明
如果上述操作都完成还是读不到变量,大概率是镜像本身的逻辑问题:你使用的是前端服务镜像,很多前端项目在build阶段会把环境变量直接编译打包到静态资源文件中,运行阶段注入的环境变量不会被静态资源读取,这种情况要么调整镜像启动逻辑,在容器启动时将环境变量注入到静态资源文件中,要么只能使用build阶段传ARG的方案。
内容的提问来源于stack exchange,提问作者rudolfninja
相关产品推荐
相关产品推荐

