I am trying to get Lets Encrypt working. I kept getting "non existent resolver" issues, even though I ripple checked that the
acme.json file was empty and in a location that traefik could write to.
I double checked that the
certificatesResolvers.letsencrypt.* objects in my
traefik.toml were correct and looked like other files that people had gotten to work.
I double checked that my
dynamic/$SERVICE.toml file referenced the same
certResolver = "letsencrypt" and yet i was still getting errors akin to
the router $SERVICE@file uses a non-existent resolver: letsencrypt.
After a lot of testing and trial/error, here's what I was able to determine:
- If the
acme.jsonfile exists but can't be opened, you will see a "permission denied" error in the log
- if the
acme.jsonfile exists and can be opened, Traefik will attempt to parse the file. If the file does not contain the expected content, then the resolver will fail silently. Later, when Traefik parses the dynamic portions of your configuration, the routers will specify a resolver that silently failed to be created... hence the
uses a non-existent resolver:errors.
The reason i was in this mess:
- I have a bit of automation that creates an empty
acme.jsonfile very early on in the instance life cycle. This automation sets the appropriate permissions on the file as well as deposits the traefik config files.
This automation was putting a file with the content:
(no, your browser is not broken, that's an empty file in every sense of the word!)
on disk. Traefik was parsing this, not finding the info it expects, and then silently moving on.
As soon as i removed the empty json file and adjusted my
systemd checks to not mark the service as failed if the file didn't exist on disk, traefik immediately started up and wrote the expected JSON to disk.
In the traefik 1.X days, an empty
acme.json file was not a problem... the file was simply overwritten w/ . the correct content. No note of this behavior change is made in the migration guide, so i'm creating this post in the hopes that some other frustrated is shepherded this way by the SEO gods in a moment of need.