登录
首页 >  Golang >  Go问答

Viper 配置文件在开发环境中可见,但在生产环境的 Dockerfile 中不可见

来源:stackoverflow

时间:2024-03-04 13:06:26 312浏览 收藏

一分耕耘,一分收获!既然打开了这篇文章《Viper 配置文件在开发环境中可见,但在生产环境的 Dockerfile 中不可见》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢!

问题内容

在正常开发(包括构建二进制文件)中,go 会找到 config.yaml 文件,但在生产中,当使用 dockerfile 映像时,它不会。

我的项目文件夹是:

|-cmd
   |- server
     |- main.go
     |- server (executable when built)
|-config
   |-config.yaml
   |-config.go

config.go 是:

func readconfigfile(viperconfig viperconfig) {
    // set default values if nil
    if viperconfig.configname == "" {
        viperconfig.configname = "config"
    }
    if viperconfig.configtype == "" {
        viperconfig.configtype = "yaml"
    }
    if viperconfig.configaddpath == "" {
        // main execute it, so it's path is relative to who execute it.
        viperconfig.configaddpath = "../../config"
    }
    // read the config
    viper.setconfigname(viperconfig.configname)
    viper.setconfigtype(viperconfig.configtype)
    // this path is from main
    viper.addconfigpath(viperconfig.configaddpath)

    err := viper.readinconfig()
    if err != nil {
        log.panic(err)
    }
}

我的dockerfile是:

from golang:alpine as base

workdir /app
copy . .

run go build -o ./cmd/server/server ./cmd/server/main.go

from alpine as final

workdir /app
copy --from=base /app/cmd/server/server ./cmd/server/
copy --from=base /app/config/config.yaml ./config/

cmd [ "./cmd/server/server" ]

从该构建的映像运行容器时显示的错误(恐慌)是:

2021/05/12 18:08:32 Config File "config" Not Found in "[/config]"

如何指向配置文件所在的 /app/config/config.yaml

谢谢。


正确答案


viper docs 开始,您可以通过多次调用 viper.addconfigpath 来添加多个配置搜索路径。

所以尝试一下:

viper.addconfigpath(viperconfig.configaddpath)
viper.addconfigpath("/app/config") // <- to work with dockerfile setup

此外,您可以在 docker 文件中添加此命令。

  • src >>cmd >> api
COPY --from=build-env /app/src/cmd/api /app/

本篇关于《Viper 配置文件在开发环境中可见,但在生产环境的 Dockerfile 中不可见》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>