certificatesResolvers not working in seperate config file

Do you want to request a feature or report a bug?

bug

What did you do?

Split the config in multiple files. (See below)

What did you expect to see?

Treafik getting Let's encrypt certificates.

Traefik uses the configurations from the other config-files, but not the one with certificatesResolvers. When moving the certificatesResolvers forom the own file, to one of the others (for example routers.yaml) it still won't work. However, when moving it to the main configuration (traefik.yaml) it does work,

What did you see instead?

Getting the following error level=error msg="the router db-dev uses a non-existent resolver: ovh"

Output of traefik version: (What version of Traefik are you using?)

v2.0.2

What is your environment & configuration (arguments, toml, provider, platform, ...)?

treafik.yaml:

api:
  dashboard: true
  insecure: true
  debug: true

log:
  level: "DEBUG"

entryPoints:
  web:
    address: ":80"
  web-secure:
    address: ":443"

accessLog: {}

providers:
  docker:
    endpoint: "unix:///var/run/docker.sock"
    exposedbydefault: false

  file:
    directory: /conf.d
    watch: true

conf.d\services.yaml:

http:
  services:
    # dummy service, the URL will be *never* called
    dummyRedirect:
      loadBalancer:
        servers:
          - url: http://192.168.0.1

conf.d\routers.yaml:

http:
  routers:
    redirectToHttps:
      entrypoints: ["web"]
      middlewares: ["httpsredirect"]
      rule: "HostRegexp(`{host:.+}`)"
      service: "dummyRedirect"

conf.d\redirectScheme.yaml:

http:
  middlewares:
# catchall Redirect
    httpsredirect:
      redirectScheme:
        scheme: https

conf.d\certificatesResolvers.yaml:

certificatesResolvers:
  ovh:
    acme:
      email: example@example.com
      storage: acme.json
      dnsChallenge:
        provider: "ovh"
        delayBeforeCheck: 60
        resolvers: ["213.251.188.155", "213.251.128.155"]

Dockerfile

FROM traefik:v2.0.2 AS reverse-proxy
EXPOSE 80 443 8080
COPY . .
RUN chmod 600 acme.json
ENV OVH_ENDPOINT=ovh-eu
ENV OVH_APPLICATION_KEY=secret
ENV OVH_APPLICATION_SECRET=secret
ENV OVH_CONSUMER_KEY=secret


If applicable, please paste the log output in DEBUG level (--log.level=DEBUG switch)

time="2019-10-12T20:05:14+02:00" level=info msg="Configuration loaded from file: /traefik.yaml"
time="2019-10-12T20:05:14+02:00" level=info msg="Traefik version 2.0.1 built on 2019-09-26T16:18:03Z"
time="2019-10-12T20:05:14+02:00" level=debug msg="Static configuration loaded {\"global\":{\"checkNewVersion\":true},\"serversTransport\":{\"maxIdleConnsPerHost\":200},\"entryPoints\":{\"traefik\":{\"address\":\":8080\",\"transport\":{\"lifeCycle\":{\"graceTimeOut\":10000000000},\"respondingTimeouts\":{\"idleTimeout\":180000000000}},\"forwardedHeaders\":{}},\"web\":{\"address\":\":80\",\"transport\":{\"lifeCycle\":{\"graceTimeOut\":10000000000},\"respondingTimeouts\":{\"idleTimeout\":180000000000}},\"forwardedHeaders\":{}},\"web-secure\":{\"address\":\":443\",\"transport\":{\"lifeCycle\":{\"graceTimeOut\":10000000000},\"respondingTimeouts\":{\"idleTimeout\":180000000000}},\"forwardedHeaders\":{}}},\"providers\":{\"providersThrottleDuration\":2000000000,\"docker\":{\"watch\":true,\"endpoint\":\"unix:///var/run/docker.sock\",\"defaultRule\":\"Host(`{{ normalize .Name }}`)\",\"swarmModeRefreshSeconds\":15000000000},\"file\":{\"directory\":\"/conf.d\",\"watch\":true}},\"api\":{\"insecure\":true,\"dashboard\":true,\"debug\":true},\"log\":{\"level\":\"DEBUG\",\"format\":\"common\"},\"accessLog\":{\"format\":\"common\",\"filters\":{},\"fields\":{\"defaultMode\":\"keep\",\"headers\":{\"defaultMode\":\"drop\"}}}}"
time="2019-10-12T20:05:14+02:00" level=info msg="\nStats collection is disabled.\nHelp us improve Traefik by turning this feature on :)\nMore details on: https://docs.traefik.io/v2.0/contributing/data-collection/\n"
time="2019-10-12T20:05:14+02:00" level=debug msg="No default certificate, generating one"
time="2019-10-12T20:05:15+02:00" level=info msg="Starting provider aggregator.ProviderAggregator {}"
time="2019-10-12T20:05:15+02:00" level=debug msg="Start TCP Server" entryPointName=web
time="2019-10-12T20:05:15+02:00" level=debug msg="Start TCP Server" entryPointName=web-secure
time="2019-10-12T20:05:15+02:00" level=debug msg="Start TCP Server" entryPointName=traefik
time="2019-10-12T20:05:15+02:00" level=info msg="Starting provider *file.Provider {\"directory\":\"/conf.d\",\"watch\":true}"
time="2019-10-12T20:05:15+02:00" level=info msg="Starting provider *docker.Provider {\"watch\":true,\"endpoint\":\"unix:///var/run/docker.sock\",\"defaultRule\":\"Host(`{{ normalize .Name }}`)\",\"swarmModeRefreshSeconds\":15000000000}"
time="2019-10-12T20:05:15+02:00" level=debug msg="Configuration received from provider file: {\"http\":{\"routers\":{\"redirectToHttps\":{\"middlewares\":[\"httpsredirect\"],\"service\":\"dummyRedirect\",\"rule\":\"HostRegexp(`{host:.+}`)\"}},\"middlewares\":{\"httpsredirect\":{\"redirectScheme\":{\"scheme\":\"https\"}}},\"services\":{\"dummyRedirect\":{\"loadBalancer\":{\"servers\":[{\"url\":\"http://192.168.0.1\"}],\"passHostHeader\":false}}}},\"tcp\":{},\"tls\":{}}" providerName=file
time="2019-10-12T20:05:15+02:00" level=debug msg="No entryPoint defined for this router, using the default one(s) instead: [web web-secure traefik]" routerName=redirectToHttps@file
time="2019-10-12T20:05:15+02:00" level=debug msg="Creating middleware" middlewareType=Pipelining serviceName=dummyRedirect entryPointName=web routerName=redirectToHttps@file middlewareName=pipelining
time="2019-10-12T20:05:15+02:00" level=debug msg="Creating load-balancer" serviceName=dummyRedirect entryPointName=web routerName=redirectToHttps@file
time="2019-10-12T20:05:15+02:00" level=debug msg="Creating server 0 http://192.168.0.1" entryPointName=web routerName=redirectToHttps@file serviceName=dummyRedirect serverName=0
time="2019-10-12T20:05:15+02:00" level=debug msg="Added outgoing tracing middleware dummyRedirect" middlewareType=TracingForwarder middlewareName=tracing entryPointName=web routerName=redirectToHttps@file
time="2019-10-12T20:05:15+02:00" level=debug msg="Creating middleware" middlewareType=RedirectScheme entryPointName=web routerName=redirectToHttps@file middlewareName=httpsredirect@file
time="2019-10-12T20:05:15+02:00" level=debug msg="Setting up redirection to https " entryPointName=web routerName=redirectToHttps@file middlewareName=httpsredirect@file middlewareType=RedirectScheme
time="2019-10-12T20:05:15+02:00" level=debug msg="Adding tracing to middleware" entryPointName=web routerName=redirectToHttps@file middlewareName=httpsredirect@file
time="2019-10-12T20:05:15+02:00" level=debug msg="Creating middleware" middlewareName=traefik-internal-recovery middlewareType=Recovery entryPointName=web
time="2019-10-12T20:05:15+02:00" level=debug msg="Creating middleware" entryPointName=web-secure middlewareType=Recovery middlewareName=traefik-internal-recovery
time="2019-10-12T20:05:15+02:00" level=debug msg="Creating middleware" middlewareType=Recovery entryPointName=traefik middlewareName=traefik-internal-recovery
time="2019-10-12T20:05:15+02:00" level=debug msg="No default certificate, generating one"
time="2019-10-12T20:05:15+02:00" level=debug msg="Provider connection established with docker 18.09.6 (API 1.39)" providerName=docker
time="2019-10-12T20:05:15+02:00" level=debug msg="Filtering disabled container" providerName=docker container=reverse-proxy-services-01f3d70f7797e666b60dcba540cd6f1d3c65f98dd53f37a582c20f1338cd52cf
time="2019-10-12T20:05:15+02:00" level=debug msg="Filtering disabled container" providerName=docker container=mysql-services-15f9f718ef8cfa9335384c2d3ea3398d8f4e78cb11b65d12ae699e0285e5eb29
time="2019-10-12T20:05:15+02:00" level=debug msg="Filtering disabled container" container=postgres-services-58a9e7e7951d3c7cbd1b5ccbb3593c785253426ff765af96242f4129fbe8db3d providerName=docker
time="2019-10-12T20:05:15+02:00" level=debug msg="Filtering disabled container" container=restic-services-599d35ef7b99a1d8c67d4e6b9d81b9fcadaf6e6b2ef468f122bd72a4b10dbe44 providerName=docker
time="2019-10-12T20:05:15+02:00" level=debug msg="Filtering disabled container" providerName=docker container=registry-1-lr7c3fqgal2qzdoaltvoprb7o-3ba0de98d3c174f987f1a50b61ead557bb1b069ffebaf541fc3ac2b232dfa3aa
time="2019-10-12T20:05:15+02:00" level=debug msg="Configuration received from provider docker: {\"http\":{\"routers\":{\"db-dev\":{\"entryPoints\":[\"web-secure\"],\"service\":\"pgadmin4\",\"rule\":\"Host(`db.dev.example.com`)\",\"tls\":{\"certResolver\":\"ovh\"}},\"db-dev_adminer\":{\"entryPoints\":[\"web-secure\"],\"service\":\"adminer\",\"rule\":\"Host(`db.dev.example.com`) \\u0026\\u0026 PathPrefix(`/adminer`)\",\"tls\":{\"certResolver\":\"ovh\"}},\"dev\":{\"entryPoints\":[\"web-secure\"],\"service\":\"gitea\",\"rule\":\"Host(`dev.example.com`)\",\"tls\":{\"certResolver\":\"ovh\"}}},\"services\":{\"adminer\":{\"loadBalancer\":{\"servers\":[{\"url\":\"http://10.0.0.16:8082\"}],\"passHostHeader\":true}},\"gitea\":{\"loadBalancer\":{\"servers\":[{\"url\":\"http://10.0.0.17:8081\"}],\"passHostHeader\":true}},\"pgadmin4\":{\"loadBalancer\":{\"servers\":[{\"url\":\"http://10.0.0.10:8083\"}],\"passHostHeader\":true}}}},\"tcp\":{}}" providerName=docker
time="2019-10-12T20:05:15+02:00" level=debug msg="No entryPoint defined for this router, using the default one(s) instead: [web web-secure traefik]" routerName=redirectToHttps@file
time="2019-10-12T20:05:15+02:00" level=debug msg="Creating middleware" middlewareName=pipelining middlewareType=Pipelining serviceName=dummyRedirect entryPointName=web routerName=redirectToHttps@file
time="2019-10-12T20:05:15+02:00" level=debug msg="Creating load-balancer" entryPointName=web routerName=redirectToHttps@file serviceName=dummyRedirect
time="2019-10-12T20:05:15+02:00" level=debug msg="Creating server 0 http://192.168.0.1" entryPointName=web routerName=redirectToHttps@file serviceName=dummyRedirect serverName=0
time="2019-10-12T20:05:15+02:00" level=debug msg="Added outgoing tracing middleware dummyRedirect" middlewareName=tracing middlewareType=TracingForwarder entryPointName=web routerName=redirectToHttps@file
time="2019-10-12T20:05:15+02:00" level=debug msg="Creating middleware" entryPointName=web routerName=redirectToHttps@file middlewareName=httpsredirect@file middlewareType=RedirectScheme
time="2019-10-12T20:05:15+02:00" level=debug msg="Setting up redirection to https " entryPointName=web routerName=redirectToHttps@file middlewareName=httpsredirect@file middlewareType=RedirectScheme
time="2019-10-12T20:05:15+02:00" level=debug msg="Adding tracing to middleware" entryPointName=web routerName=redirectToHttps@file middlewareName=httpsredirect@file
time="2019-10-12T20:05:15+02:00" level=debug msg="Creating middleware" entryPointName=web middlewareName=traefik-internal-recovery middlewareType=Recovery
time="2019-10-12T20:05:15+02:00" level=debug msg="Creating middleware" middlewareType=Recovery middlewareName=traefik-internal-recovery entryPointName=web-secure
time="2019-10-12T20:05:15+02:00" level=debug msg="Creating middleware" entryPointName=traefik middlewareName=traefik-internal-recovery middlewareType=Recovery
time="2019-10-12T20:05:15+02:00" level=debug msg="Creating middleware" serviceName=adminer middlewareName=pipelining middlewareType=Pipelining entryPointName=web-secure routerName=db-dev_adminer@docker
time="2019-10-12T20:05:15+02:00" level=debug msg="Creating load-balancer" entryPointName=web-secure routerName=db-dev_adminer@docker serviceName=adminer
time="2019-10-12T20:05:15+02:00" level=debug msg="Creating server 0 http://10.0.0.16:8082" routerName=db-dev_adminer@docker serviceName=adminer serverName=0 entryPointName=web-secure
time="2019-10-12T20:05:15+02:00" level=debug msg="Added outgoing tracing middleware adminer" middlewareName=tracing middlewareType=TracingForwarder entryPointName=web-secure routerName=db-dev_adminer@docker
time="2019-10-12T20:05:15+02:00" level=debug msg="Creating middleware" middlewareType=Pipelining entryPointName=web-secure serviceName=gitea routerName=dev@docker middlewareName=pipelining
time="2019-10-12T20:05:15+02:00" level=debug msg="Creating load-balancer" routerName=dev@docker entryPointName=web-secure serviceName=gitea
time="2019-10-12T20:05:15+02:00" level=debug msg="Creating server 0 http://10.0.0.17:8081" serviceName=gitea serverName=0 routerName=dev@docker entryPointName=web-secure
time="2019-10-12T20:05:15+02:00" level=debug msg="Added outgoing tracing middleware gitea" middlewareName=tracing middlewareType=TracingForwarder entryPointName=web-secure routerName=dev@docker
time="2019-10-12T20:05:15+02:00" level=debug msg="Creating middleware" entryPointName=web-secure routerName=db-dev@docker serviceName=pgadmin4 middlewareType=Pipelining middlewareName=pipelining
time="2019-10-12T20:05:15+02:00" level=debug msg="Creating load-balancer" entryPointName=web-secure routerName=db-dev@docker serviceName=pgadmin4
time="2019-10-12T20:05:15+02:00" level=debug msg="Creating server 0 http://10.0.0.10:8083" serviceName=pgadmin4 entryPointName=web-secure routerName=db-dev@docker serverName=0
time="2019-10-12T20:05:15+02:00" level=debug msg="Added outgoing tracing middleware pgadmin4" middlewareName=tracing middlewareType=TracingForwarder entryPointName=web-secure routerName=db-dev@docker
time="2019-10-12T20:05:15+02:00" level=debug msg="Creating middleware" entryPointName=web-secure middlewareName=traefik-internal-recovery middlewareType=Recovery
time="2019-10-12T20:05:15+02:00" level=debug msg="No default certificate, generating one"
time="2019-10-12T20:05:15+02:00" level=error msg="the router db-dev_adminer uses a non-existent resolver: ovh"
time="2019-10-12T20:05:15+02:00" level=error msg="the router dev uses a non-existent resolver: ovh"
time="2019-10-12T20:05:15+02:00" level=error msg="the router db-dev uses a non-existent resolver: ovh"

Hello,

certificatesResolvers are a parts of the static configuration.

The files placed in file.directory must be related to the dynamic configuration

So, you have to move certificatesResolvers to traefik.yaml.