月度档案:2019年3月

关于docker compose中env文件的一个小教训

最近我和Docker一起工作了很多,学习学习。我已经为我的msdn mag数据点列那将在四月份推出,2019年5月和6月发行。我还有另一篇裕固族博客文章,我将在五月的文章中发表。我在研究其他人。

我研究了Docker环境变量以及将它们输入Docker映像或容器的不同方法。

我的docker compose文件引用了一个名为db_pw的环境变量,但没有指定其值。

dataapidocker:
图片:$Docker_Registry-DataApidocker
建造:
语境:
dockerfile:dataapidocker/dockerfile
环境:
-DPY-PW

Docker将从主机读取环境变量以发现该值。

但这是一种痛苦。我没有在开发机器上永久性地存储db_pw,必须经常记住设置它。EltonStoneman(来自Docker)说我真的应该考虑使用Docker env文件特性。这允许您在环境文件中设置变量,并让Docker编写从中读取的文件。我可以把那个特殊的文件放在我的源代码管理之外。(我总是担心!)

我首先跟踪显示使用名为anything.env文件的文档。我创建了一个名为hush-hush.env的文件,在其中我指定了变量。这是文件的完整内容:

db_pw=大秘密

然后在Docker Compose中,在服务中,env_文件标记允许您指向它。甚至可以删除YML文件中的环境标记。

dataapidocker:
图片:$Docker_Registry-DataApidocker
建造:
语境:
dockerfile:dataapidocker/dockerfile
文件:
- HuSH HuS.Env

这很管用。我的应用程序能够在代码中发现环境变量。

但后来我改进了我的解决方案,为我的数据库使用另一个容器。主容器依赖于新的MSSQL容器。而MSSQL容器要求我将数据库密码作为一个环境变量传递。因为db_pw已经存在,通过替换(通过花括号),我可以很容易地做到这一点。这是新的Docker撰写文件:

版本:“3.4”
服务:
dataapidocker:
图片:$Docker_Registry-DataApidocker
建造:
语境:
dockerfile:dataapidocker/dockerfile
文件:
- HuSH HuS.Env
依赖性:
-DB
分贝:
图片:mcr.microsoft.com/mssql/server
卷:
-mssql服务器julie data:/var/opt/mssql/data
环境:
sa_密码:“$db_pw”
接受“Y”
端口:
-“1433∶1433”
卷:
MSSQL服务器Julie数据:

这里有一个操作顺序问题。当我构建Docker撰写文件时,它抱怨DB U PW不可用,我的应用程序出现故障。DB服务未获取my hush-hush.env文件的内容。我尝试了很多事情,例如,将env_文件添加到db服务。最后,这就是我学到的。

替换使用要求在Docker Compose中定义db_pw变量。我把它重新添加到主要服务中,但它并没有从hush-hush.env得到价值。

但是你可以有一个没有名字的.env文件。扩展名*是文件的全名。docker compose将足够早地读取它,并将.env文件中的值提供给声明的db_pw。然后所有的碎片都落在了原位。将mssql容器的db_pw值作为其环境变量进行拆分。我的应用程序代码能够读取docker为自己的任务传递到运行容器中的环境变量。

最后一个docker-compose.yml文件如下:

版本:“3.4”
服务:
dataapidocker:
图片:$Docker_Registry-DataApidocker
建造:
语境:
dockerfile:dataapidocker/dockerfile
环境:
-DPY-PW
依赖性:
-DB
分贝:
图片:mcr.microsoft.com/mssql/server
卷:
-mssql服务器julie data:/var/opt/mssql/data
环境:
sa_密码:“$db_pw”
接受“Y”
端口:
-“1433∶1433”
卷:
MSSQL服务器Julie数据:

它依赖一个名为“.env”的文件定义了变量键值对(与上面的hush-hush.env相同)。

db_pw=大秘密

资源:
https://docs.docker.com/compose/environment-variables网站/