用户名
Email
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
帖子
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
软件与程序人生
›
云原生
›
【Docker】小记5 compose-环境变量
【Docker】小记5 compose-环境变量
大号在练葵花宝典
论坛元老
|
2024-9-7 09:29:58
|
显示全部楼层
|
阅读模式
楼主
主题
1594
|
帖子
1594
|
积分
4782
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
优先级
总结
这是是对compose的yaml集成文件中环境变量设置的记录,来源于官网说明,简单记录。末了,日常惦记女朋侪。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
大号在练葵花宝典
论坛元老
这个人很懒什么都没写!
楼主热帖
记一次MySql唯一索引在left join连表查 ...
鸿蒙系统架构分析
2021年高教杯数学建模国赛C题的解题过 ...
STM32F1与STM32CubeIDE编程实例-磁簧开 ...
C# 使用dataGridView导入导出excel(NPO ...
【大话云原生】微服务篇-五星级酒店的 ...
MySQL实战45讲 3
springboot请求参数的方法分享 ...
渗透测试过程参考
GO实现Redis:GO实现内存数据库(3) ...
标签云
国产数据库
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
SQL-Server
人工智能
物联网
快速回复
返回顶部
返回列表