亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將 ENV 變量傳遞給 Docker 中的構建過程

如何將 ENV 變量傳遞給 Docker 中的構建過程

Go
蠱毒傳說 2022-05-18 16:10:32
為我的 Go 應用程序構建容器時遇到了環境變量問題。在我的本地機器上,我可以執行以下操作:export GIN_MODE=releasego build -a這將以某種方式編譯我的應用程序,其中名為 GIN 的庫會注意到 GIN_MODE 環境變量并表現不同。當我運行應用程序時,它會聲明[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production. - using env:   export GIN_MODE=release - using code:  gin.SetMode(gin.ReleaseMode)如果未設置此 ENV 變量,并且如果 GIN_MODE 變量設置正確,它將忽略此警告。但是,在 Docker 中,它不會那樣工作。在我的Dockerfile我寫了這些特定的代碼行:# Build the Go appENV GIN_MODE=releaseRUN CGO_ENABLED=0 GOOS=linux go build -v -a -installsuffix cgo -o main .我還嘗試直接在 RUN 語句中傳遞變量:RUN GIN_MODE=release CGO_ENABLED=0 GOOS=linux go build -v -a -installsuffix cgo -o main .該變量永遠不會對go-build語句可見。我怎樣才能做到這一點?
查看完整描述

1 回答

?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

環境變量不會編譯到 go 二進制文件中。環境變量是傳遞給其子進程的進程的屬性。

Dockerfile正在正確設置GIN_MODE環境變量。但這Dockerfile似乎用于構建 go 二進制文件,而不是用于運行/部署已編譯的二進制文件。因此,您應該確保還GIN_MODE為已部署應用程序的執行上下文設置環境變量,無論它可能是在一個Dockerfile或一個systemd單元中,還是其他任何恰好是部署方法的地方。


當您go build在 shell 中手動執行時它“工作”的原因是因為您的 shell 進程通過GIN_MODE運行攜帶環境變量export GIN_MODE=release,并且您使用相同的 shell 稍后運行應用程序,GIN_MODE環境變量可用于您的應用程序通過成為 shell 中的子進程。


查看完整回答
反對 回復 2022-05-18
  • 1 回答
  • 0 關注
  • 178 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號