如何将配置文件推送到新的oryd / hydra docker映像?

时间:2019-08-19 14:57:10

标签: docker go dockerfile

我正在使用oryd / hydra泊坞镜像:https://hub.docker.com/r/oryd/hydra 为了使用我自己的配置构建自定义图片。

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

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

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

vi Dockerfile

文件内容:

  

$ cat Dockerfile

     

FROM oryd / hydra:latest

     

COPY .hydra /

建立图片时我没有错误:

  

$ docker build -t sso-demo-hydra。

     

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

     

第1/2步:从oryd / hydra:latest

     

---> 50f0a70dbda9

     

第2/2步:COPY .hydra /

     

--->使用缓存

     

---> 3539634979c0

     

成功构建了3539634979c0

     

成功标记了sso-demo-hydra:latest

     

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

启动应用程序时,出现以下警告:

  

sso-demo-hydra |找不到配置文件,因为在“ [/]”中找不到“ Config File“ .hydra””

PS:上下文目录中有一个.hydra文件

感谢您的支持。

2 个答案:

答案 0 :(得分:1)

请参见此docker映像的github source code,相关代码如下:

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可以使其正常。

答案 1 :(得分:0)

在这种情况下,我建议您在启动Docker容器时传递配置文件(--config)。例如:

docker run -d \
  --name ory-hydra-example--hydra \
  --network hydraguide \
  -p 9000:4444 \
  -p 9001:4445 \
  -e SECRETS_SYSTEM=$SECRETS_SYSTEM \
  -e DSN=$DSN \
  -e URLS_SELF_ISSUER=http://127.0.0.1:9000 \
  -e URLS_CONSENT=http://127.0.0.1:9020/consent \
  -e URLS_LOGIN=http://127.0.0.1:9020/login \
  -v $(pwd)/hydra.yaml:/hydra.yaml \
  oryd/hydra:v1.8.5 serve all --config hydra.yaml --dangerous-force-http

这样,您无需创建自己的dockerfile。