Publishing, checked 2026-10-17
Ghost: Docker configuration reference
Self-hosted publishing platform for blogs and newsletters, with built-in members and Stripe subscriptions.
At a glance
Ports
Ports| Port | What listens | Source |
|---|
2368 | Default HTTP listener inside the container. Map it to whatever host port the reverse proxy expects. | source for port 2368 |
Environment variables
Environment variables| Variable | Required | What it does | Example | Source |
|---|
url | Yes | The public URL of the site. Every internal link, RSS entry, sitemap and email is generated from this value, so a wrong or missing one rewrites links across the whole site. | https://blog.example.com | source for url |
database__client | Yes | Database driver. Production mode requires an external MySQL 8 server; SQLite via database__connection__filename only works in development mode. | mysql | source for database__client |
database__connection__host | Yes | Hostname of the MySQL server, nested under the database__connection key using the double-underscore config syntax. | db | source for database__connection__host |
mail__transport | No | Mail transport for member and staff emails. Required in production; without it, invites, password resets and newsletters cannot send. | SMTP | source for mail__transport |
NODE_ENV | No | Node environment. The Docker image defaults to production, unlike a bare Ghost install which defaults to development. | production | source for NODE_ENV |
Volumes that must persist
Volumes| Path | What is in it | Source |
|---|
/var/lib/ghost/content | Themes, images, uploaded files and the SQLite database file in development mode. Everything Ghost cannot regenerate lives here. | source for /var/lib/ghost/content |
Behind a reverse proxy
- Route the domain to container port 2368. Production mode needs X-Forwarded-For, X-Forwarded-Host and X-Forwarded-Proto set correctly by the proxy. source for this reverse-proxy note
- The url config value must exactly match how the site is reached, including http versus https. A mismatch breaks Portal, member auth redirects and email links. source for this reverse-proxy note
- Docker secrets are supported: append _FILE to a nested variable such as database__connection__password_FILE to read it from a file instead of the environment, from Ghost 6.58.0 onward. source for this reverse-proxy note
What it needs alongside it
Dependencies| Dependency | Why | Source |
|---|
| MySQL 8 | Required application database in production mode. SQLite is only supported in development mode and is not persisted the same way. | source for MySQL 8 |
Release timeline
Releases| Version | Date | Breaking | What changed | Source |
|---|
v6.71.0 | 2026-10-15 | No | Added paid tier-based automation triggers and fixed self-hosted Portal, Search and Comments failing to load, plus relative SQLite paths failing after the 6.70 upgrade. | source for release v6.71.0 |
v6.70.0 | 2026-10-13 | No | Removed Ember from the codebase, released the React editor and billing screens and added navigation URL suggestions. | source for release v6.70.0 |
v6.69.0 | 2026-10-07 | No | Released automation analytics and self-serve site exports, plus Portal and Unsplash fixes. | source for release v6.69.0 |
v6.68.0 | 2026-10-06 | No | Released member location maps and the React posts list, and increased the maximum automation actions from 20 to 50. | source for release v6.68.0 |
v6.67.0 | 2026-09-29 | No | Fixed post history crashes, repeated Stripe portal errors and importing posts with empty mobiledoc content. | source for release v6.67.0 |
If it is not coming up
Read from the upstream documentation, repository and container registry by Keita Emsden on 2026-10-17. Every row links the page it came from. Upstream changes without telling anyone, so check the source link before you rely on a value.
Other app references
All app references