【问题标题】:Viper config file found on dev but not on production using Dockerfile使用 Dockerfile 在 dev 上找到 Viper 配置文件,但在生产中找不到
【发布时间】:2021-05-12 18:19:50
【问题描述】:

在正常开发(包括构建二进制文件)中,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

谢谢。

【问题讨论】:

    标签: docker go dockerfile viper-go


    【解决方案1】:

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

    那就试试吧:

    viper.AddConfigPath(viperConfig.ConfigAddPath)
    viper.AddConfigPath("/app/config") // <- to work with Dockerfile setup
    

    【讨论】:

    • 如果“/app/config”不存在,本地环境不会报错吗?
    【解决方案2】:

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

    • src &gt;&gt;cmd &gt;&gt; api
    COPY --from=build-env /app/src/cmd/api /app/
    

    【讨论】:

      猜你喜欢
      • 2017-09-18
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      • 2019-02-18
      • 2012-02-21
      • 1970-01-01
      • 2018-07-14
      • 2019-07-23
      相关资源
      最近更新 更多