WordPress no Docker: como instalar com Docker Compose
Aprenda a rodar o WordPress no Docker com a imagem oficial e o MySQL, entender cada variável do compose, ligar o HTTPS com proxy e manter atualização e backup.
Por Redação Eleven Host · @robson.direitodigital · 1 de novembro de 2026 · 6 min de leitura

Capa da Redação Eleven Host para o guia: WordPress no Docker: como instalar com Docker Compose Arte: Eleven Host
É possível rodar o WordPress no Docker com a imagem oficial e um banco MySQL, descritos num arquivo docker-compose.yml. Os dados do site e do banco ficam em volumes, fora dos contêineres. Veja o compose oficial e como adaptá-lo.
Quando vale rodar o WordPress no Docker
Na instalação tradicional, o WordPress, o servidor web, o PHP e o banco são instalados direto no sistema do servidor. No Docker, cada peça roda num contêiner, e o arquivo Compose descreve o conjunto inteiro. Isso deixa a instalação descrita num só arquivo, que você pode copiar para outro servidor.
O Docker vale quando você quer um ambiente descrito em arquivo e já usa contêineres para outros serviços. Em compensação, você passa a cuidar também de imagens, volumes e atualizações dos contêineres. Para comparar com o caminho tradicional, leia VPS para WordPress: quando vale a pena e como escolher.
No Docker, o WordPress e o banco são contêineres separados, e o que importa guardar são os volumes.
Antes de começar
Você precisa de uma VPS com o Docker e o plugin Docker Compose instalados. Se ainda está conhecendo servidores, leia antes o guia de iniciantes sobre servidor VPS.
O exemplo abaixo vem do README da imagem oficial do WordPress no Docker Hub.
O docker-compose.yml oficial do WordPress
Crie uma pasta para o projeto, entre nela e salve o conteúdo abaixo como docker-compose.yml. É o exemplo do README da imagem oficial:
services:
wordpress:
image: wordpress
restart: always
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
volumes:
- wordpress:/var/www/html
db:
image: mysql:8.0
restart: always
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db:/var/lib/mysql
volumes:
wordpress:
db:
O que faz cada variável WORDPRESS_DB_*
O serviço wordpress usa quatro variáveis para falar com o banco:
WORDPRESS_DB_HOSTé o endereço do banco. No exemplo,dbé o nome do outro serviço do Compose.WORDPRESS_DB_USERé o usuário do banco.WORDPRESS_DB_PASSWORDé a senha desse usuário.WORDPRESS_DB_NAMEé o nome do banco de dados.
O README avisa que o banco indicado em WORDPRESS_DB_NAME precisa já existir no servidor MySQL, porque o contêiner do WordPress não o cria. No compose acima, quem o cria é a variável MYSQL_DATABASE do serviço db. Por isso, os nomes, o usuário e a senha dos dois serviços precisam ser iguais.
O exemplo usa exampleuser e examplepass. Troque por um usuário e uma senha fortes antes de subir, nos dois serviços. O README também aceita o sufixo _FILE no nome da variável para carregar o valor de um arquivo, em geral em /run/secrets/, o que evita deixar a senha escrita no compose.
No serviço db, o MYSQL_RANDOM_ROOT_PASSWORD gera uma senha aleatória para o root do MySQL. A tag mysql:8.0 é a do exemplo do README, e não uma indicação de versão recomendada. Recomendamos também não acrescentar ports ao serviço db: o exemplo não publica a porta do banco, e o WordPress alcança o MySQL pela rede interna do Compose.
Subir o WordPress e abrir no navegador
Dentro da pasta do projeto, suba os contêineres em segundo plano:
docker compose up -d
Espere a inicialização e abra http://localhost:8080 se estiver no próprio computador, ou http://host-ip:8080, trocando host-ip pelo IP da VPS.
O exemplo publica a porta 8080:80 em todas as interfaces do servidor. Para um site de verdade, nossa recomendação é publicar só no próprio servidor, trocando a linha por:
- 127.0.0.1:8080:80
Assim o acesso de fora passa por um proxy com HTTPS. Atenção: o firewall UFW não fecha uma porta publicada pelo Docker, então a porta no formato 8080:80 fica exposta mesmo com o UFW ativo.
HTTPS com um proxy reverso
O próximo passo é colocar um proxy reverso na frente do contêiner, para receber o domínio, cuidar do certificado e encaminhar o tráfego para 127.0.0.1:8080. O guia Caddy na VPS: servidor web com HTTPS automático mostra uma opção.
O README da imagem tem um aviso para esse caso: quando o proxy reverso termina o TLS, é preciso configurar corretamente o cabeçalho X-Forwarded-Proto. Sem isso, o WordPress pode não perceber que o acesso é por HTTPS.
Está escolhendo uma VPS? VPS a partir de R$ 17,00/mês no Plano Bronze; confira na loja o que cada plano inclui. Ver os planos de VPS
Atualizar o WordPress no Docker
Há duas coisas para atualizar, e elas são diferentes:
- A imagem traz o PHP e o Apache. Para buscar uma imagem nova, rode
docker compose pulle depoisdocker compose up -d. Esse passo é uma recomendação nossa; o README não traz esse comando. - O núcleo do WordPress fica no volume, em
/var/www/html. Segundo o README, por padrão as atualizações automáticas ficam ligadas e, depois da primeira instalação, o site se atualiza dentro do volume.
docker compose pull
docker compose up -d
Na prática, isso significa que o docker compose pull não atualiza o WordPress em si. Se você prefere uma imagem fixa, o README pede que reconstrua e reimplante a imagem com frequência para receber as correções de segurança. Para cuidar do WordPress pelo terminal, veja WP-CLI: como gerenciar o WordPress pelo terminal.
Outra informação do README: a imagem não traz extensões PHP extras. Se um plugin precisar de uma, como no envio de e-mail, será preciso criar uma imagem personalizada.
Backup dos volumes e do banco
A página da imagem não traz um procedimento de backup, então o que segue é conselho nosso. Há dois lugares com dados:
- o volume
wordpress, com os arquivos em/var/www/html, incluindo os temas emwp-content/themes/e os plugins emwp-content/plugins/; - o volume
db, com o banco em/var/lib/mysql.
Faça uma cópia dos dois volumes, ou um dump do banco com mysqldump, e guarde fora do servidor. Antes de uma atualização, faça uma cópia nova e teste a restauração em outro ambiente.
Checklist do WordPress no Docker
- Troquei
exampleusereexamplepasspor valores fortes, iguais nos dois serviços. - O serviço
dbnão temports. - A porta do WordPress está como
127.0.0.1:8080:80e há um proxy com HTTPS na frente. - O
X-Forwarded-Protoestá configurado no proxy. - Sei a diferença entre atualizar a imagem e atualizar o núcleo do WordPress.
- Tenho cópia dos volumes
wordpressedbfora do servidor. - Já testei uma restauração.
Quer conhecer o 11SQL, banco de dados na nuvem da Eleven Host? a partir de R$ 9,90/mês no 11SQL Mini; confira na loja o que cada plano inclui. Conhecer o 11SQL
Perguntas frequentes
Como instalar o WordPress no Docker?
Salve o compose oficial como docker-compose.yml, troque as senhas de exemplo e rode docker compose up -d. Depois, abra a porta 8080 no navegador para continuar a instalação.
Onde ficam os arquivos do WordPress no Docker?
No volume wordpress, montado em /var/www/html. Os temas ficam em wp-content/themes/ e os plugins em wp-content/plugins/.
O docker compose pull atualiza o WordPress?
Atualiza a imagem, com o PHP e o Apache. O núcleo do WordPress fica no volume e se atualiza pelo próprio WordPress.
Posso deixar a porta do banco aberta?
Não é necessário. O exemplo oficial não publica a porta do serviço db, e o WordPress alcança o MySQL pela rede interna do Compose.