Início
» LINUX
»
Como transferir arquivos de e para um contêiner Docker
Como transferir arquivos de e para um contêiner Docker
Use o comando do Docker docker cppara copiar arquivos ou diretórios entre sua máquina local e um contêiner. Ele funciona em ambas as direções, copia diretórios recursivamente e pode ser usado em um contêiner em execução ou parado. Você não precisa abrir um shell no contêiner nem criar um arquivo tar para uma cópia comum.
A sintaxe básica é docker cp SOURCE DESTINATION. Coloque o nome ou ID do contêiner antes de dois pontos para o caminho do contêiner: docker cp LOCAL_PATH CONTAINER:CONTAINER_PATHcopia para dentro de um contêiner, enquanto docker cp CONTAINER:CONTAINER_PATH LOCAL_PATHcopia para fora. A documentação do Docker sobre o comando `docker cp` detalha as regras de caminho e diretório.
1. Encontre o nome ou o ID do contêiner.
Execute este comando a partir de um terminal onde os comandos do Docker possam alcançar o Docker Engine:
docker ps -a
docker psLista os contêineres em execução; adicionar -atambém mostra os contêineres parados. Use o valor na NAMEScoluna ou um ID de contêiner nos comandos abaixo. Um nome como webé fácil de reutilizar; um ID é um identificador exato quando você precisa distinguir contêineres. Você pode verificar os campos exibidos por `docker ps` / `docker container ls` .
Use o nome ou ID do contêiner exibido por docker ps -a.
2. Copie um arquivo do seu computador para o contêiner.
Execute o comando docker cpna máquina cujos arquivos você deseja copiar. Por exemplo, a partir de uma pasta de projeto contendo o arquivo report.csv, copie-o para /tmpdentro do contêiner chamado web:
docker cp ./report.csv web:/tmp/report.csv
Substitua `<caminho_do_arquivo_local> ./report.csv` pelo caminho do arquivo local, ` web<nome_do_contêiner>` pelo nome ou ID do seu contêiner e ` /tmp/report.csv<caminho_de_destino>` pelo caminho de destino dentro do contêiner. Os caminhos do contêiner são interpretados a partir do diretório raiz do contêiner, portanto, a barra inicial é opcional. Se o destino nomear um diretório existente, o Docker colocará o arquivo nele usando o nome do arquivo de origem.
Este comando copia um arquivo de host para o contêiner.
O Docker copia diretórios recursivamente. Se /etc/app/já existir, este comando coloca os arquivos configdentro dele:
docker cp ./config web:/etc/app/
Para copiar apenas o conteúdo de configpara /etc/app/, inclua /.no final do caminho de origem:
O /.sufixo significa copiar o conteúdo do diretório, em vez de aninhar o diretório de origem.
docker cp ./config/. web:/etc/app/
O Docker não cria diretórios pai ausentes. Crie primeiro o diretório pai do destino. Para criar uma pasta ausente dentro de um contêiner em execução, execute `docker-compose up` docker exec web mkdir -p /etc/app, e então copie os arquivos. ` docker-compose up` docker execrequer um contêiner em execução; `docker-compose up` docker cpnão.
3. Copie um arquivo do contêiner para o seu computador.
Para recuperar um arquivo, inverta a ordem de origem e destino. Primeiro, crie a pasta de destino local e, em seguida, copie o arquivo de log do contêiner.
A pasta de destino local deve existir antes de copiar os arquivos para ela.
Você pode recuperar um diretório da mesma forma. Adicione /.ao caminho de origem do contêiner para copiar seu conteúdo diretamente para um diretório local existente:
docker cp web:/var/log/app/. ./backup/
O Docker pode copiar arquivos de um contêiner parado, o que é útil para coletar logs ou configurações após o término de um processo.
Usando o Docker Compose
Se o seu projeto usa o Compose, use o nome do serviço docker compose cpem vez de procurar um ID de contêiner. Por exemplo, copie um arquivo local para um serviço chamado web:
Por padrão, os arquivos copiados para um contêiner pertencem ao usuário root e ao grupo primário; os arquivos copiados para o seu computador pertencem ao usuário que executa o Docker. As permissões são preservadas sempre que possível. Use `--preserve` -apara preservar o UID e o GID de origem. Se um aplicativo não conseguir ler um arquivo, verifique o destino e a propriedade do arquivo em vez de conceder privilégios ao contêiner.
Os arquivos na camada gravável de um contêiner são removidos com o contêiner. Para dados que precisam persistir, use um volume Docker ou um bind mount. Volumes são adequados para dados persistentes em contêineres; bind mounts permitem que o host e o contêiner acessem os mesmos arquivos. Se você copiar para um caminho coberto por um bind mount, você altera os dados montados. Verifique o destino primeiro. Consulte as orientações do Docker sobre volumes e bind mounts .
Solução rápida de problemas
“Contêiner inexistente”: execute o comando docker ps -ae verifique o nome ou o ID do contêiner.
“Arquivo ou diretório inexistente”: verifique o caminho de origem e certifique-se de que o diretório pai de destino exista. Os caminhos dos contêineres começam em /.
A pasta foi parar um nível abaixo do esperado: use o parâmetro `--out` /.para copiar apenas o conteúdo do diretório.
Permissão negada: verifique se sua conta pode usar o Docker e se o usuário do aplicativo tem permissão de leitura e gravação no destino. No Linux, use sudosomente se a política de acesso ao Docker do seu sistema exigir.
Os arquivos desaparecem após a limpeza: salve dados importantes em um volume ou ponto de montagem vinculado, e não apenas na camada gravável do contêiner.