I am using Docker Compose in Portainer and want to use the Caddyfile (/etc/caddy/Caddyfile) in a persistent data volume I’ve created as:
volumes:
caddy_data:
name: caddy_data
external: true
I’ve tried this, but it doesn’t seem to see the Caddyfile.
volumes:
- caddy_data:/etc/caddy/Caddyfile
What’s the best way to expose this Caddyfile so it can be backed up and edited even when the container image is updated?
That’s definitely wrong. You need the data mount to be /data
to persist Caddy’s certs and keys. Config should not go in there.
I don’t really understand what you’re trying to do here. What’s the problem with mounting your Caddyfile normally? Keep Caddy Running — Caddy Documentation
I’m aware this is wrong. What I’m trying to do is mount the Caddyfile somewhere I can edit it and make it persist outside of the Caddy image.
volumes:
- /mnt/caddy/Caddyfile:/etc/caddy/Caddyfile
I am having trouble getting this to mount. I am runing Docker/Portainer in a VM, and using Docker Compose within Portainer. It isn’t able to access any of these mountpoints I’ve tried, but works fine with the /data folder being mapped to a persistent volume. I thought there was a way to also put the Caddyfile into that persistent storage volume so I can update it and it persists.
Where are you storing your docker-compose.yml
file? Put your Caddyfile
right next to that, then do - ./Caddyfile:/etc/caddy/Caddyfile
1 Like
I’ve tried that. Portainer itself keeps the docker-compose.yml files in its own folders (portainer/compose/###/). I’ve placed the Caddyfile there next to the docker-compose and it throws the same error.
container process: error during container init: error mounting "/data/compose/186/Caddyfile" to rootfs at "/etc/caddy/Caddyfile": mount /data/compose/186/Caddyfile:/etc/caddy/Caddyfile (via /proc/self/fd/6), flags: 0x5000: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type
Thanks for the assistance. I just got it to work using the following path:
- /var/lib/docker/volumes/caddy_data/_data/Caddyfile:/etc/caddy/Caddyfile
This places the file in the persistent volume as desired.
That’s really weird. You don’t need to put the file in a volume on the host. I’m confused.
1 Like
How would you handle this? Is there a better way?
As Keep Caddy Running — Caddy Documentation says, literally put the Caddyfile
and docker-compose.yml
files next to eachother. I’m not sure why that would be a problem. Both are config and should be treated as such. Config is not data, it doesn’t go in a data volume.
1 Like
This is probably the case outside of Portainer, but within Portainer paths are working differently. Please direct me to a working Portainer compose file for Caddy that addresses this if possible. I use data volumes for all sorts of purposes, and keeping some specific config files in them for a specific container makes some tasks simpler.