首页 > 解决方案 > 如何将配置文件推送到新的 oryd/hydra docker 镜像?

问题描述

我正在使用 oryd/hydra docker 镜像:https ://hub.docker.com/r/oryd/hydra 以使用我自己的配置构建自定义镜像。

我确实创建了一个自定义目录:

mkdir sso-demo-hydra
cd sso-demo-hydra

然后我使用该语法创建一个 Dockerfile:

vi Dockerfile

文件内容:

$ 猫 Dockerfile

来自 oryd/hydra:最新

复制.hydra /

构建图像时,我没有收到错误:

$ docker build -t sso-demo-hydra 。

将构建上下文发送到 Docker 守护进程 8.704kB

第 1/2 步:来自 oryd/hydra:最新

---> 50f0a70dbda9

第 2/2 步:复制 .hydra /

---> 使用缓存

---> 3539634979c0

构建成功 3539634979c0

成功标记 sso-demo-hydra:latest

安全警告:您正在针对非 Windows Docker 主机从 Windows 构建 Docker 映像。添加到构建上下文的所有文件和目录都将具有“-rwxr-xr-x”权限。建议仔细检查和重置敏感文件和目录的权限。

当我启动应用程序时,我收到以下警告:

sso 演示水螅 | 未找到配置文件,因为“[/]”中未找到“配置文件“.hydra”

PS:context目录下有个.hydra文件

谢谢你的支持。

标签: dockergodockerfile

解决方案


查看这个 docker 镜像的github 源代码,相关代码如下:

func initConfig() {
    if cfgFile != "" {
        // enable ability to specify config file via flag
        viper.SetConfigFile(cfgFile)
    } else {
        path := absPathify("$HOME")
        if _, err := os.Stat(filepath.Join(path, ".hydra.yml")); err != nil {
            _, _ = os.Create(filepath.Join(path, ".hydra.yml"))
        }

        viper.SetConfigType("yaml")
        viper.SetConfigName(".hydra") // name of config file (without extension)
        viper.AddConfigPath("$HOME")  // adding home directory as first search path
    }

    viper.SetDefault("LOG_LEVEL", "info")

    viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
    viper.AutomaticEnv() // read in environment variables that match

    // If a config file is found, read it in.
    if err := viper.ReadInConfig(); err != nil {
        fmt.Printf(`Config file not found because "%s"`, err)
        fmt.Println("")
    }
}

从上面,您实际上可以看到它所期望的是,.hydra.yml而不是只是删除扩展名的那个:.hydra.hydra

viper.SetConfigName(".hydra") // 配置文件的名称(不带扩展名)

所以根本原因是:它的错误提示不友好,让你遇到问题,改用.hydra.yml就可以了。


推荐阅读