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ção | Descrição |
|---|---|
-a, --archive | Preserva as informações do proprietário do arquivo (uid/gid) |
-L, --follow-link | Se a origem for um link simbólico, copia o arquivo real para o qual ele aponta |
-q, --quiet | Nã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
| Comando | Descrição |
|---|---|
docker cp web:/etc/nginx/nginx.conf ./nginx.conf | Copia 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.html | Copia um arquivo do host para o contêiner. |
docker cp web:/etc/nginx/conf.d ./confd | Copia 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 cppara 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