
docker stack deploy無法載入.env檔案裡的環境變量及其解決方式
发布日期:2021-05-06 19:48:52
浏览次数:29
分类:精选文章
本文共 1590 字,大约阅读时间需要 5 分钟。
docker stack deploy無法載入.env檔案裡的環境變量及其解決方式
前言
這個問題是筆者在運行這個repo時發生的。
這個repo本來是不會造成這個問題的,筆者為了配置方便,選擇自行另外建立一個.env檔案,與docker-compose.yml配合使用。
.env檔裡面儲存了建立docker集群及部署服務時需要用到的環境變量。在使用docker-compose up
這個指令時,會參考docker-compose.yml這個配置檔。
$HOSTIP
這個環境變量。 筆者發現在.env檔裡定環境變量這個方法對docker-compose
管用,但是對docker stack deploy
來說卻不管用。
後來在GitHub尋找原因,才看到原來是因為docker stack deploy
本來就不支持這種用法。
解決方式
首先看到,這個討論串中dnephin的回答說明了docker stack deploy確實無法從.env檔案中載入環境變量。
方法一
討論串中有不少人提出他們自己的解決方案,筆者親測了,做了一些修改,使它成為一個可以運行的腳本:
dsd() { stack=${ 1:-${ PWD##*/}} # by default, the name of the cointaining folder compose_file=${2:-docker-compose.yml} if [ ! -f $compose_file ]; then echo "Misses compose file: $compose_file" >&2 return 1 fi # execute as a subcommand in order to avoid the variables remain set ( # export variables excluding comments [ -f .env ] && export $(sed '/^#/d' .env) # Use dsd your_stack your_compose_file to override the defaults docker stack deploy --compose-file $compose_file $stack )}dsd
這個腳本運行的原理如下:
雖然docker stack deploy
無法從.env檔裡載入環境變量,但是它卻可以從當前環境中找出它需要的環境變量。 他的做法就是在呼叫docker stack deploy
之前,先在當前環境中設定所需的環境變量,以此來繞過它無法從.env檔中抓出環境變量的限制。 而"設定環境變量+docker stack deploy
"這兩個指令是以subcommand的角色被執行的,所以在整段bash檔執行結束後,環境變量會自動消失。
我們將以上內容寫進secrets.sh
,接著將secrets.sh
變成可以執行的檔案:
chmod +x secrets.sh
然後運行:
./secrets.sh
就會發現.env檔中定義的環境變量是可以被成功載入的。
方法二
更簡單,只要在docker stack deploy後面加上-c <(docker-compose config)這個參數,在建置時就可以自動將.env檔內的環境變量載入。
docker stack deploy -c <(docker-compose config)
參考連結
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年03月30日 11时07分55秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【计算机网络】应用层
2021-05-09
【Maven】POM基本概念
2021-05-09
【Java思考】Java 中的实参与形参之间的传递到底是值传递还是引用传递呢?
2021-05-09
【设计模式】单例模式
2021-05-09
【SpringCloud】Hystrix熔断器
2021-05-09
【Linux】2.3 Linux目录结构
2021-05-09
java.util.Optional学习笔记
2021-05-09
远程触发Jenkins的Pipeline任务的并发问题处理
2021-05-09
jackson学习之七:常用Field注解
2021-05-09
jackson学习之八:常用方法注解
2021-05-09
Web应用程序并发问题处理的一点小经验
2021-05-09
entity framework core在独立类库下执行迁移操作
2021-05-09
Asp.Net Core 2.1+的视图缓存(响应缓存)
2021-05-09
服务器开发- Asp.Net Core中的websocket,并封装一个简单的中间件
2021-05-09
没花一分钱的我竟然收到的JetBrains IDEA官方免费赠送一年的Licence
2021-05-09
Redis 集合统计(HyperLogLog)
2021-05-09
RE套路 - 关于pyinstaller打包文件的复原
2021-05-09
【wp】HWS计划2021硬件安全冬令营线上选拔赛
2021-05-09
Ef+T4模板实现代码快速生成器
2021-05-09
dll详解
2021-05-09