I 'm trying to setup a caddy reverse proxy within Docker and I am following the guide in this YouTube video
https://www.youtube.com/watch?v=qj45uHP7Jmo but when I the run docker compose up -d command I get this error:
failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting “/home/Joe/container/caddy/Caddyfile” to rootfs at “/etc/caddy/Caddyfile”: create mountpoint for /etc/caddy/Caddyfile mount: cannot create subdirectories in “/var/lib/docker/overlay2/49e15938cd9c418a331b963f6fbbd3bba726b28748113ee8d028f6adf034b525/merged/etc/caddy/Caddyfile”: 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
I am a bit perplexed on what I am doing wrong so any advice would be appreciated!
Can you share your compose file? You should be able to paste into code blocks in a comment or your original post. It’s likely you’ve yamld something wrong.
Sounds like a bad prank show
YOU GOT YAML’D! 🤪
Do you already have the file created and populated at ‘/home/Joe/container/caddy/Caddyfile’ before running your up command?
I do but I am wondering if the syntax in my caddyfile is wrong.
I did get past my initial error thanks to this group but I cannot get to my portainer via host name still.
I do but I am wondering if the syntax in my caddyfile is wrong.
Caddy can format caddyfiles;
caddy fmt --overwrite /home/Joe/container/caddy/Caddyfile caddy validate --config /home/Joe/container/caddy/Caddyfile --adapter caddyfile
You can format it automatically
Here is my YAMLD YAML haha
version: ‘3.3’ networks: caddy: services: portainer: image: portainer/portainer-ce:latest container_name: portainer2 restart: unless-stopped security_opt: - no-new-privileges:true volumes: - /etc/localtime:/etc/localtime:ro - /var/run/docker.sock:/var/run/docker.sock:ro - /home/Joe/containers/portainer/portainer-data:/data networks: - caddy ports: - 9000:9000
caddy: image: caddy:latest restart: unless-stopped container_name: caddy ports: - 80:80 - 443:443 volumes: - /home/Joe/container/caddy/Caddyfile:/etc/caddy/Caddyfile - /home/Joe/container/caddy/site:/srv - /home/Joe/container/caddy/caddy_data:/data - /home/Joe/container/caddy/caddy_config:/config networks: - caddy volumes: caddy_data:
The error suggests that you’re trying to mount a file (
Caddyfile
) onto a directory or vice versa. Let’s debug this step by step.Steps to Fix:
-
Check if the path exists and is correct Run:
ls -ld /home/Joe/container/caddy/Caddyfile
- If it’s a directory, it should be a file instead.
- If it doesn’t exist, create an empty one:
touch /home/Joe/container/caddy/Caddyfile
-
Ensure correct permissions
chmod 644 /home/Joe/container/caddy/Caddyfile
-
Check YAML Formatting
Yourdocker-compose.yml
seems to have incorrect indentation and improper quotes aroundversion
. Here’s a fixed version:version: "3.3" networks: caddy: services: portainer: image: portainer/portainer-ce:latest container_name: portainer2 restart: unless-stopped security_opt: - no-new-privileges:true volumes: - /etc/localtime:/etc/localtime:ro - /var/run/docker.sock:/var/run/docker.sock:ro - /home/Joe/containers/portainer/portainer-data:/data networks: - caddy ports: - 9000:9000 caddy: image: caddy:latest restart: unless-stopped container_name: caddy ports: - 80:80 - 443:443 volumes: - /home/Joe/container/caddy/Caddyfile:/etc/caddy/Caddyfile - /home/Joe/container/caddy/site:/srv - /home/Joe/container/caddy/caddy_data:/data - /home/Joe/container/caddy/caddy_config:/config networks: - caddy
-
Restart Docker and Try Again
docker compose down docker compose up -d
If the error persists, check
docker logs caddy
for additional hints.Seems like AI wrote this. And did a good job!
-
I have always had trouble whenever I tried mounting files, and it seems that you’re getting the same error, “not a directory”.
Stick to mounting directories and you should be fine
/home/Joe/container/caddy:/etc/caddy
I was successful in installing and using caddy directly on my host instead of podman (docker).
Edit: someone doesn’t like that I succeeded at it …
Ik this sounds like a stackoverflow kind of thing to say but why u using caddy not nginx?
Edit: I’ve uploaded my nginx config if you would like to take a look https://github.com/muntedcrocodile/nginxconf
Because caddy has built in, and default enabled, SSL of all sites using letsencrypt, something nginx doesn’t have from what I can see.
Nginx does not have default SSL but the example I’ve uploaded has its quite a simple setup and gives you far greater control and modularity.
Caddy is growing in popularity and finding its ways into more and more tutorials. Traefik and Caddy seem to be found in more reverse proxy tutorials/docs than NPM anymore. Forget about SWAG these days.
nginx >>>>>