為我的 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 中的子進程。
- 1 回答
- 0 關注
- 178 瀏覽
添加回答
舉報
0/150
提交
取消