千家信息网

Docker Compose如何引用环境变量

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,今天小编给大家分享一下Docker Compose如何引用环境变量的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获
千家信息网最后更新 2026年11月04日Docker Compose如何引用环境变量

今天小编给大家分享一下Docker Compose如何引用环境变量的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

说明:本文的演示环境为 ubuntu 16.04。

compose cli 与环境变量

compose cli(compose command-line 即 docker-compose 程序)能够识别名称为 compose_project_name 和 compose_file 等环境变量(具体支持的环境变量请参考)。比如我们可以通过这两个环境变量为 docker-compose 指定 project 的名称和配置文件:

$ export compose_project_name=testvar$ export compose_file=~/projects/composecounter/docker-compose.yml

然后启动应用,显示的 project 名称都是我们在环境变量中指定的:

如果设置了环境变量的同时又指定了命令行选项,那么会应用命令行选项的设置:

$ docker-compose -p nickproject up -d

在 compose file 中引用环境变量

我们还可以在 compose file 中直接引用环境变量,比如下面的 demo:

version: '3' services: web:  image: ${imagetag}  ports:  - "5000:5000" redis:  image: "redis:alpine"

我们通过环境变量 ${imagetag} 指定了 web 的镜像,下面通过 export 的方式来为 compose 配置文件中的环境变量传值:

注意,如果对应的环境变量没有被设置,那么 compose 就会把它替换为一个空字符串:

碰到这种情况,我们可以在 compose 的配置文件中为该变量设置一个默认值:

version: '3'services: web: image: ${imagetag:-defaultwebimage} ports:  - "5000:5000" redis: image: "redis:alpine"

这样,如果没有设置 imagetag 变量,就会应用 defaultwebimage:

除了这种方式,我们还可以通过后面将介绍的 .env 文件来为环境变量设置默认值。

把环境变量传递给容器

先来看一下在 compose file 中如何为容器设置环境变量:

web: environment: debug: 1

compose file 中的 environment 节点用来为容器设置环境变量,上面的写法等同于:

$ docker run -e debug=1

要把当前 shell 环境变量的值传递给容器的环境变量也很简单,去掉上面代码中的赋值部分就可以了:

web: environment: debug:

这种情况下,如果没有在当前的 shell 中导出环境变量 debug,compose file 中会把它解释为 null:

在试试导出环境变量 debug 的情况:

$ export debug=1

这才是我们设计的正确的使用场景!

使用文件为容器设置多个环境变量

如果觉得通过 environment 为容器设置环境变量不够过瘾,我们还可以像 docker -run 的 --env-file 参数一样通过文件为容器设置环境变量:

web: env_file: - web-variables.env

注意,web-variables.env 文件的路径是相对于 docker-compose.yml 文件的相对路径。上面的代码效果与下面的代码相同:

$ docker run --env-file=web-variables.env

web-variables.env 文件中可以定义一个或多个环境变量:

# define web container envappname=helloworldauthor=nick liversion=1.0

检查下结果:

原来 compose 把 env_file 的设置翻译成了 environment!

.env 文件

当我们在 docker-compose.yml 文件中引用了大量的环境变量时,对每个环境变量都设置默认值将是繁琐的,并且也会影响 docker-compose.yml 简洁程度。此时我们可以通过 .env 文件来为 docker-compose.yml 文件引用的所有环境变量设置默认值!
修改 docker-compose.yml 文件的内容如下:

version: '3'services: web: image: ${imagetag}      environment:  appname:  author:  version: ports:  - "5000:5000" redis: image: "redis:alpine"

然后在相同的目录下创建 .env 文件,编辑其内容如下:

# define env var default value.imagetag=defaultwebimageappname=default app nameauthor=default author nameversion=default version is 1.0

检查下结果,此时所有的环境变量都显示为 .env 文件中定义的默认值:

配置不同场景下的环境变量

从前面的部分中我们可以看到,docker compose 提供了足够的灵活性来让我们设置 docker-compose.yml 文件中引用的环境变量,它们的优先级如下:

  1. compose file

  2. shell environment variables

  3. environment file

  4. dockerfile

  5. variable is not defined

首先,在 docker-compose.yml 文件中直接设置的值优先级是最高的。
然后是在当前 shell 中 export 的环境变量值。
接下来是在环境变量文件中定义的值。
再接下来是在 dockerfile 中定义的值。
最后还没有找到相关的环境变量就认为该环境变量没有被定义。

根据上面的优先级定义,我们可以把不同场景下的环境变量定义在不同的 shell 脚本中并导出,然后在执行 docker-compose 命令前先执行 source 命令把 shell 脚本中定义的环境变量导出到当前的 shell 中。通过这样的方式可以减少维护环境变量的地方,下面的例子中我们分别在 docker-compose.yml 文件所在的目录创建 test.sh 和 prod.sh,test.sh 的内容如下:

#!/bin/bash# define env var default value.export imagetag=web:v1export appname=helloworldexport author=nick liexport version=1.0

prod.sh 的内容如下:

#!/bin/bash# define env var default value.export imagetag=webpord:v1export appname=helloworldprodexport author=nick liexport version=1.0lts

在测试环境下,执行下面的命令:

$ source test.sh$ docker-compose config

此时 docker-compose.yml 中的环境变量应用的都是测试环境相关的设置。

而在生产环境下,执行下面的命令:

$ source prod.sh$ docker-compose config

此时 docker-compose.yml 中的环境变量应用的都是生产环境相关的设置。

以上就是"Docker Compose如何引用环境变量"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

环境 变量 文件 面的 容器 内容 命令 应用 不同 知识 篇文章 配置 代码 优先级 可以通过 名称 场景 情况 方式 是在 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中国互联网科技股 科技互联网公司装修 互联网科技卖菜 北京互联网科技公司 互联网科技集团 互联网科技ppt模板 北京禾田雨橡互联网科技 宁波青枫互联网科技有限公司 中化能源互联网科技招聘 呼和浩特新华互联网科技学院 996高科技互联网公司 用友工业互联网科技发展 江苏互联网智能科技软件 互联网科技数字货币 济南小医互联网科技有限公司招聘 上海同邻互联网科技有限公司规模 吉林省码上互联网科技电话 平安好医生打造互联网科技医疗 上海旺乐尼互联网科技有限公司 现代科技的标志之一的互联网 深圳九邦互联网科技有限公司 互联网科技工作委员会 圆梦互联网科技 互联网科技未来 深圳齐家互联网科技 佳云科技和互联网广告 美国互联网科技实力 互联网科技手机排行榜 易租星互联网科技有限公司 恒生科技互联网指数十大成分股
0