大号在练葵花宝典 发表于 2024-9-7 09:29:58

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

compose-环境变量

记录一下环境变量的内容


媒介

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

这个不消赘述吧,直接
# compose file
services:
web:
    image: "webapp:v1.5"
v1.5 就是变量
二、利用变量文件

1.默认 .env 文件

条件: 将.env文件放置于compose文件同级目录下
# .env
TAG=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
优先级
https://i-blog.csdnimg.cn/blog_migrate/ac149f7dd29d8e67336b043badc4361e.png
总结

这是是对compose的yaml集成文件中环境变量设置的记录,来源于官网说明,简单记录。末了,日常惦记女朋侪。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【Docker】小记5 compose-环境变量