Conteúdo

Tutorial de docker cp: copie arquivos entre o host e o contêiner

docker cp copia arquivos entre o host e o contêiner. Você pode usá-lo com o contêiner em execução ou parado.

Sintaxe

docker cp [opções] contêiner:caminho-de-origem destino-no-host     # contêiner → host
docker cp [opções] origem-no-host contêiner:caminho-de-destino   # host → contêiner
OpçãoDescrição
-a, --archivePreserva as informações do proprietário do arquivo (uid/gid)
-L, --follow-linkSe a origem for um link simbólico, copia o arquivo real para o qual ele aponta
-q, --quietNão exibe o progresso da cópia

Se você definir a origem ou o destino como -, poderá ler no formato tar da entrada padrão ou gravar na saída padrão.

Exemplo

Vamos operar um contêiner nginx chamado web:

$ docker cp web:/etc/nginx/nginx.conf ./nginx.conf

$ head -n 3 nginx.conf

user  nginx;
worker_processes  auto;

$ echo "<h1>copied in</h1>" > page.html

$ docker cp page.html web:/usr/share/nginx/html/page.html

$ docker exec web cat /usr/share/nginx/html/page.html
<h1>copied in</h1>

$ docker cp web:/etc/nginx/conf.d ./confd

$ ls confd
default.conf

$ docker cp web:/no/such/file .
Error response from daemon: Could not find the file /no/such/file in container web
ComandoDescrição
docker cp web:/etc/nginx/nginx.conf ./nginx.confCopia o arquivo de configuração do contêiner para o host. É útil para obter a configuração padrão e modificá-la.
docker cp page.html web:/usr/share/nginx/html/page.htmlCopia um arquivo do host para o contêiner.
docker cp web:/etc/nginx/conf.d ./confdCopia uma pasta inteira. Se o destino confd não existir, ele será criado e receberá o conteúdo da pasta.
docker cp web:/no/such/file .Mensagem de erro exibida quando a origem não existe.

Regras para copiar pastas:

  • Se o destino não existir: cria a pasta de destino e copia para ela o conteúdo da pasta de origem (como no exemplo acima).
  • Se o destino já existir: coloca a pasta de origem inteira dentro do destino, como destino/nome-da-pasta-de-origem.
  • Se o caminho de origem terminar com /. (por exemplo, web:/etc/nginx/conf.d/.): copia somente o conteúdo, sem incluir a própria pasta.

Quando usar docker cp

Use nos seguintes casos:

  • Para obter arquivos de configuração padrão, logs ou arquivos gerados no contêiner.
  • Para colocar temporariamente um arquivo no contêiner para testá-lo.
  • Para fazer backup e restauração de bancos de dados no Windows PowerShell: primeiro exporte os dados para um arquivo dentro do contêiner e depois use docker cp para copiá-lo para fora. Assim, você evita problemas com o < não suportado pelo PowerShell e com a codificação (veja Mensagens de erro comuns).

Não use nos seguintes casos:

  • Para sincronizar código durante o desenvolvimento: use um bind mount ou docker compose watch (veja Aplicativo Node.js).
  • Para dados que precisam ser mantidos: use um volume.

Capítulos relacionados

Exercícios

Exercício: copie a página inicial do nginx, /usr/share/nginx/html/index.html, do contêiner web para o host, altere o título e copie o arquivo de volta. Confira o resultado no navegador (inicie o contêiner com -p 8080:80).

Resposta
docker cp web:/usr/share/nginx/html/index.html ./index.html
# Edite index.html em um editor
docker cp ./index.html web:/usr/share/nginx/html/index.html

Atualize http://localhost:8080 para ver a alteração. Ela desaparecerá quando você excluir o contêiner.

Perguntas frequentes

Posso usar docker cp em um contêiner parado?

Sim. docker cp lê e grava diretamente no sistema de arquivos do contêiner, então você também pode copiar com o contêiner parado. Isso é útil quando ele não inicia e você precisa extrair arquivos de configuração ou logs para verificar.

Se eu alterar um arquivo de configuração com docker cp, ele continuará lá depois que eu recriar o contêiner?

Não. O arquivo copiado fica na camada gravável do contêiner e desaparece quando você o exclui. Para arquivos que precisam ser mantidos, use um bind mount ou inclua-os na imagem.

O Docker Compose tem um comando equivalente?

Sim: docker compose cp nome-do-serviço:caminho destino. A sintaxe é a mesma; use o nome do serviço no lugar do nome do contêiner.

Atualizado 14 de outubro de 2026