0


【Docker】小记5 compose-环境变量

compose-环境变量

记录一下环境变量的内容


文章目录


前言

compose yaml文件中环境变量可以有两种设置方法,1、直接在文件中写入变量值。2、用变量文件。


一、直接写入变量值

这个不用赘述吧,直接

# compose file
services:
  web:
    image: "webapp:v1.5"

v1.5 就是变量

二、使用变量文件

1.默认 .env 文件

前提: 将.env文件放置于compose文件同级目录下

# .envTAG=v1.5

# compose file
services:
  web:
    image: "webapp:${TAG}"
意思就是docker compose会自动搜寻文件中的这个TAG变量然后给值替换上去,验证方法就是启动后执行
 docker compose config
$ docker compose config

# print
services:
  web:
    image: 'webapp:v1.5'

2.env_file指令

在compose2.24.0之后,可以使用字段env_file在compose文件中配置环境变量

env_file:
  - path: ./default.env
    required: true# default
  - path: ./override.env
    required: false

如果你缺少目标env文件,但是参数required=true时会报异常,required=false时compose会忽略这个问题

也可以写为

services:
  webapp:
    image: “”
    env_file:
      -.env
      -.env.override

compose会按照顺序加载这些文件,变量以最后定义的为准

同时,向下兼容,依然可以使用${env_key}的方式来进行变量获取,前提是你的文件中有这个env_key,这样的话不需要拘泥于env文件所在位置,因为我没试过换地方,我选择同级目录【狗头】

  services:
    webapp:
      image: my-webapp-image
      environment:
        - DEBUG=${DEBUG}

可以使用一个命令也就是 docker compose run -e DEBUG=0 来覆盖env文件的值

3.CLI

使用命令指定env文件

docker compose --env-file ./config/.env.dev up

大差不差

4.一点细节

关于如何使用 合成文件(compose yaml)里的环境变量属性和 env_file的说法

直接使用合成文件中的属性

属性值 较服务名称缩进4个字符

web:
  environment:
    - DEBUG=1

而且你可以不设置具体的值,只设置一个变量,然后再运行命令时设置

web:
  environment:
    - DEBUG

有很多写法,列举几个

${var}# 设置变量为var的值
${var:-default}# 如果已设置且非空就是var的值,否则为默认值
${var-default}# 如果已设置且非空就是var的值,否则为默认值

${var:?error}# 如果设置且非空,则返回VAR的值,否则退出并返回错误
${var?error}# 如果设置且非空,则返回VAR的值,否则退出并返回错误

${VAR:+replacement}# 如果设置了VAR且非空,则替换为replacement的值,否则为空
${VAR+replacement}# 如果设置了VAR且非空,则替换为replacement的值,否则为空

想要更多,就在 https://docs.docker.com/compose/compose-file/12-interpolation/

使用 env_file中的属性

使用env_file属性,比直接使用.env文件的好处是不需要拘泥于file的使用目录

比如直接用命令:docker run --env-file=FILEPATH …(我这两个点是其他指令的意思)

web:
  env_file:
    - web-variables.env

有几个点,是官方文档说的

1、多个文件,会按照顺序从上到下执行,会覆盖同名环境变量

2、.env可以和env_file同时使用,但是在.env中定义的变量不能在合成文件(yaml文件中再次声明使用)

3、优先级为 environment > env_file

4、env_file的文件地址与yaml文件事相对的

5、可以用 docker compose run -e 来覆盖.env文件里的值

6、使用env_file并且指定了文件地址,但是确实文件的话,会报错。如果设置了参数 required=False,会跳过这个问题


可以在命令中设置 POSTGRES_VERSION=9.3 然后再yaml文件中也设置

db:
  image: "postgres:${POSTGRES_VERSION}"

这种情况,如果没有在命令行设置POSTGRES_VERSION的值,那么会被替换为

db:
  image: "postgres:."

环境变量文件小细节

  • VAR=VAL -> VAL
  • VAR="VAL" -> VAL
  • VAR='VAL' -> VAL
  • VAR=VAL # comment -> VAL
  • VAR=VAL# not a comment -> VAL# not a comment
  • 引号的内联注释必须跟在右引号之后。
  • VAR="VAL # not a comment" -> VAL # not a comment
  • VAR="VAL" # comment -> VAL
  • 按字面意思使用单引号(‘)值。
  • VAR='$OTHER' -> $OTHER
  • VAR='${OTHER}' -> ${OTHER}
  • 引号可以用\转义。
  • VAR='Let\'s go!' -> Let's go!
  • VAR="{\"hello\": \"json\"}" -> {"hello": "json"}
  • 双引号的值支持常见的外壳转义序列,包括\n、\r、\t和\。
  • VAR="some\tvalue" -> some value
  • VAR='some\tvalue' -> some\tvalue
  • VAR=some\tvalue -> some\tvalue

优先级
在这里插入图片描述

总结

这是是对compose的yaml集成文件中环境变量设置的记录,来源于官网说明,简单记录。最后,日常想念女朋友。

标签: docker eureka java

本文转载自: https://blog.csdn.net/weixin_45470898/article/details/138157697
版权归原作者 够格GOUGE 所有, 如有侵权,请联系我们删除。

“【Docker】小记5 compose-环境变量”的评论:

还没有评论