docker-compose环境变量使用及说明

 更新时间:2026年06月29日 09:51:29   作者:demon7552003  
本文涵盖了docker-compose.yml文件中环境变量的使用方法、优先优先级以及.env文件的作用,强调了在项目配置中的灵活性和实用性

介绍

在项目中,往往需要在 docker-compose.yml 文件中使用环境变量来控制不同的条件和使用场景,docker-compose支持多级设置环境变量。

docker-compose.yml 文件中引用的环境变量,它们的优先级如下:

Compose file
Shell environment variables
Environment file
Dockerfile
Variable is not defined

注意:

  • 以上优先级顺序都是指容器引用变量,不包括互相引用。
  • compose file中只能引用 Shell环境变量、.env 环境文件。引用不到Dockerfile中定义的变量,也引用不了env_file设置的文件中变量。
  • compose file中的变量是不能互相引用的。即设置一个变量时,引用内部的一个变量则结果是空值。
  • composefile中通过$ 符号引用环境变量,不支持 ${var:-value},${var:=value},${var:default}等语法。从version:'3' 开始支持 ${var:-value}
  • 很多默认值,则可以使用 .env 环境变量文件解决。
  • docker-compose.yml中引用的变量
  • /etc/profile等变量并不会对容器生效。

查看当前配置命令

 docker-compose config

环境变量的设置方式

compose file

version: '2'
services:
  data-tag-biz:
    image: 192.168.1.XX/xxxx/data-standard-biz:9.0
    network_mode: "host"
    restart: always
    ports:
      - 10015:9015
    environment:
      - NACOS-HOST=${NACOS_HOST}
      - SW_NAME=test:${SV_NAME}
      - SW_SERVICES=192.168.1.XX:11800
      - TRACK=-javaagent:/opt/skywalking-agent.jar
      - JAVA_OPTS=-Xms512m -Xmx1024m -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC
    container_name: data-standard-biz-9

shell环境变量

export SV_NAME=data-standard-biz

环境变量文件

docker原生命令

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

docker file中指定

version: '3'
services:
  data-tag-biz:
    env_file:
      - file.env   #相对于docker-compose.yml文件的位置。
    environment:
      - SV_NAME=data-standard-biz
      - NACOS-HOST=${NACOS_HOST}
      - SW_NAME=test:${SV_NAME}
      - SW_SERVICES=192.168.1.XX:11800
      - TRACK=-javaagent:/opt/skywalking-agent.jar
      - JAVA_OPTS=-Xms512m -Xmx1024m -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC
    container_name: data-standard-biz-9
#file.env
SV_NAME=data-standard-biz-envfile
ENV_VALUE=env-value
NOOP=NO OP KEY

docker-compose config输出:

services:
  data-tag-biz:
    container_name: data-standard-biz-9
    environment:
      ENV_FILE: ''                              #没有引用到的变量ENV_VALUE
      ENV_VALUE: env-value                     # 自动加入的
      JAVA_OPTS: -Xms512m -Xmx1024m -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC
      NACOS-HOST: 192.168.1.XX
      NOOP: NO OP KEY                         #自动加入的。
      SV_NAME: data-standard-biz
      SW_NAME: test:data-standard-biz-env
      SW_SERVICES: 192.168.1.XX:11800
      TRACK: -javaagent:/opt/skywalking-agent.jar
    image: 192.168.1.36/xxxx/data-standard-biz:9.0
    network_mode: host
    ports:
    - 10015:9015/tcp
    restart: always
version: '3.0'

docker-compose文件中的变量是引用不到 环境文件中定义的变量的。环境文件中定义的所有变量是仅相对于容器可见的

环境变量文件中的所有变量都会自动加到变量列表中,不需要在docker-compose中定义。

.env 文件

在docker-compose.yml同级目录中加入.env文件,则可以设置docker-compose环境变量的默认值,可以在docker-compose中引用到的。

此文件可以为大量的变量配置默认值,用来代替${var:-defaultvalue}

version: '3'
services:
  data-tag-biz:
    ... ...
    environment:
      - SV_NAME=data-standard-biz
      - NACOS-HOST=${NACOS_HOST}
      - SW_NAME=test:${SV_NAME}  #如果不设置,则默认使用 .env中默认值。
... ... 
# .env
SV_NAME=data-standard-biz-env
TEST_ENV=xxxxxxxx

docker-compose config输出:

services:
  data-tag-biz:
    container_name: data-standard-biz-9
    environment:
      ENV_FILE: ''
      ENV_VALUE: env-value
      JAVA_OPTS: -Xms512m -Xmx1024m -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC
      NACOS-HOST: 192.168.1.XX
      NOOP: NO OP KEY
      SV_NAME: data-standard-biz
      SW_NAME: test:data-standard-biz-env   #使用了 .env中默认值。
      SW_SERVICES: 192.168.1.XX:11800
      TRACK: -javaagent:/opt/skywalking-agent.jar
    image: 192.168.1.XX/xxxx/data-standard-biz:9.0
    network_mode: host
    ports:
    - 10015:9015/tcp
    restart: always
version: '3.0'

Compose CLI 环境变量

Compose CLI(compose command-line 即 docker-compose 程序)能够识别名称为 COMPOSE_PROJECT_NAME 和 COMPOSE_FILE 等环境变量(具体支持的环境变量请参考这里)。

通过设置这些变量可以控制docker-compose的行为。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • docker-compose启动redis多机集群的实现(6台服务器3主3从)

    docker-compose启动redis多机集群的实现(6台服务器3主3从)

    本文主要介绍了docker-compose启动redis多机集群的实现(6台服务器3主3从),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • ubuntu系统中无法拉取docker镜像的问题及解决

    ubuntu系统中无法拉取docker镜像的问题及解决

    作者遇到的docker拉取mysql8.0镜像失败的问题,通过更换镜像加速器、更新配置、诊断DNS解析问题等步骤,最终成功使用DaoCloud镜像站拉取镜像,作者分享了解决问题的过程和经验,对遇到类似问题的人会有帮助
    2026-04-04
  • Docker部署搭建WebDav服务的详细过程

    Docker部署搭建WebDav服务的详细过程

    这篇文章主要介绍了Docker部署WebDav服务,小编综合了各种共享方式后最终选择了使用 WebDav 来共享文件,下面小编把搭建部署过程分享给大家,需要的朋友可以参考下
    2022-08-08
  • 如何在docker中运行springboot项目过程图解

    如何在docker中运行springboot项目过程图解

    这篇文章主要介绍了如何在docker中运行springboot项目过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Docker安装Nginx并部署及MySQL容器构建全过程

    Docker安装Nginx并部署及MySQL容器构建全过程

    众所周知Docker是一种容器化技术,可以用来快速部署和管理应用程序,这篇文章主要给大家介绍了关于Docker安装Nginx并部署及MySQL容器构建的相关资料,需要的朋友可以参考下
    2024-02-02
  • docker中通过nginx+confd动态生成配置的解决方案

    docker中通过nginx+confd动态生成配置的解决方案

    这篇文章主要介绍了docker:nginx+confd动态生成配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • 在Docker中部署Confluence和jira-software的方法步骤

    在Docker中部署Confluence和jira-software的方法步骤

    这篇文章主要介绍了在Docker中部署Confluence和jira-software的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06
  • docker构建的镜像的三种方式小结

    docker构建的镜像的三种方式小结

    这篇文章主要为大家详细介绍了docker中构建的镜像的三种方式,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下
    2024-04-04
  • Docker 容器健康检查的指令方式详解

    Docker 容器健康检查的指令方式详解

    这篇文章主要介绍了Docker 容器健康检查的指令方式详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • 使用Dockerfile部署nodejs服务的方法步骤

    使用Dockerfile部署nodejs服务的方法步骤

    这篇文章主要介绍了使用Dockerfile部署nodejs服务的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01

最新评论