Base de Conhecimento

WordPress no Docker: como instalar com Docker Compose

  • wordpress no docker, wordpress, docker compose, mysql, vps
  • Usuários acharam útil: 0

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

Arte da Eleven Host: janela de terminal com o título: WordPress no Docker: como instalar com Docker Compose

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 pull e depois docker 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 em wp-content/themes/ e os plugins em wp-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 exampleuser e examplepass por valores fortes, iguais nos dois serviços.
  • O serviço db não tem ports.
  • A porta do WordPress está como 127.0.0.1:8080:80 e há um proxy com HTTPS na frente.
  • O X-Forwarded-Proto está configurado no proxy.
  • Sei a diferença entre atualizar a imagem e atualizar o núcleo do WordPress.
  • Tenho cópia dos volumes wordpress e db fora 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.

Esta resposta lhe foi útil?

Artigos Relacionados