使用Dockerfile在开发人员上找到Viper配置文件,但在生产环境中找不到

使用Dockerfile在开发人员上找到Viper配置文件,但在生产环境中找不到,docker,go,dockerfile,viper-go,Docker,Go,Dockerfile,Viper Go,在正常开发(包括构建二进制文件)中,go会找到config.yaml文件,但在生产中,当使用Dockerfile映像时,它不会找到 我的项目文件夹是: |-cmd |- server |- main.go |- server (executable when built) |-config |-config.yaml |-config.go config.go是: func readConfigFile(viperConfig viperConfig){

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

我的项目文件夹是:

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

func readConfigFile(viperConfig viperConfig){
//如果为nil,则设置默认值
如果viperConfig.ConfigName==“”{
viperConfig.ConfigName=“config”
}
如果viperConfig.ConfigType==“”{
viperConfig.ConfigType=“yaml”
}
如果viperConfig.ConfigAddPath==“”{
//main执行它,因此它的路径与执行它的人有关。
viperConfig.ConfigAddPath=“../../config”
}
//读取配置文件
viper.SetConfigName(viperConfig.ConfigName)
viper.SetConfigType(viperConfig.ConfigType)
//这条路是从主干道来的
viper.AddConfigPath(viperConfig.ConfigAddPath)
错误:=viper.ReadInConfig()
如果错误!=零{
log.Panic(错误)
}
}
我的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.AddConfigPath
可以为配置添加多个搜索路径

因此,请尝试:

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