Why Your Ghost Theme Changes Aren’t Showing (and How to Fix It When Using Docker)
If you're running a self-hosted Ghost blog with Docker and you've made changes to your theme—only to find that nothing has changed on your site—you're not alone. This is a common pitfall when working with Ghost and Dockerized environments. Let's break down what might be going wrong and how to fix it properly.
1. Ghost Doesn’t Auto-Reload Themes
First things first: Ghost doesn’t watch your theme files for changes.
If you edit theme files (like default.hbs
, post.hbs
, or CSS/JS assets), Ghost won’t apply those changes until you restart the container.
✅ Fix: Restart the Ghost container
If you’re using Docker Compose and your service is called service-ghost
, you just need to run:
docker compose restart service-ghost
Or if you’re using the older docker-compose
command:
docker-compose restart service-ghost
This tells Docker to stop and start only that one service—no need to take your whole stack down.
2. Are You Editing the Right Theme?
It may sound obvious, but Ghost can store multiple themes—and you might be editing the wrong one.
✅ Fix: Check the active theme
Go to your Ghost admin panel:
http://yourdomain.com/ghost
Navigate to:
Settings → Design → Change theme
Make sure the theme you’re editing (e.g., headline
) is the active one.
3. Are You Editing the Theme in the Right Location?
When using Docker, Ghost stores themes inside the container at:
/var/lib/ghost/content/themes/
However, most setups mount this directory to your host machine using volumes. If you're editing theme files inside the wrong place (like your local system, but it’s not mounted), Ghost won’t see the changes.
✅ Fix: Verify your volume mount
In your docker-compose.yml
, make sure you have something like this:
volumes:
- ./ghost-content:/var/lib/ghost/content
This means your themes are located on your host at:
./ghost-content/themes/headline/
Edit files here—not inside the container unless you know what you’re doing.
You can confirm where it’s actually mounted with:
docker inspect service-ghost
Look under the Mounts
section.
4. Clear Browser Cache and Force Reload
Modern browsers are aggressive about caching. Even if Ghost is serving your updated files, your browser might still be showing you the old version.
✅ Fix: Do a hard refresh
- Windows/Linux:
Ctrl + Shift + R
- macOS:
Cmd + Shift + R
Also try incognito mode or another browser to rule out caching issues.
5. Check for Errors in Your Theme Code
If your .hbs
or .css
changes have syntax errors, Ghost may fail silently or fall back to default rendering.
✅ Fix: Review Ghost logs
Run:
docker logs service-ghost
Look for anything suspicious like:
Failed to compile template
Unhandled exception
Fix the code, then restart Ghost again.
6. Re-upload the Theme (If All Else Fails)
Sometimes changes get messy. As a last resort, you can zip your modified theme and upload it through the Ghost admin UI.
Go to:
Settings → Design → Change theme → Upload a theme
This forces Ghost to reload and register the theme anew.
✨ Bonus Tips
- Version control your themes (Git): This helps keep track of what changed and makes it easy to roll back.
- Use local development: Test your theme changes locally before deploying them via Docker.
- Avoid editing themes inside the container: Any change made inside the container without a mounted volume will be lost if the container is rebuilt.
- Restarting all services: If you’re unsure which service is to blame, a full restart helps:
docker compose down
docker compose up -d
🧠 Finally
Docker is great for isolating environments, but it introduces some complexity when dealing with file changes—especially with CMSs like Ghost. Always make sure:
- You edit in the right directory
- You restart the container after edits
- You check that the theme is active
- You clear cache and watch the logs
With these steps, your theme changes should now appear as expected. If not, it's almost always related to one of the above issues.
Comments ()