Em um arquivo Docker, eu tenho
COPY . .
Eu quero excluir um diretório inteiro, no meu caso, o diretório node_modules.
Algo assim:
COPY [all but **/node_modules/**] .
Isso é possível com o Docker?
docker
dockerfile
docker-copy
Alexander Mills
fonte
fonte
.dockerignore
?Respostas:
Crie um arquivo
.dockerignore
no diretório de contexto de construção da janela de encaixe (portanto, nesse caso, provavelmente um diretório pai de node_modules) com uma linha:embora você provavelmente só queira:
Informações sobre dockerignore: https://docs.docker.com/engine/reference/builder/#dockerignore-file
fonte
/config/nginx/ /config/logstash/
, nãols config/ gunicorn logs logstash nginx
ls /config/
, tentou adicionar esses caminhos ao seu .dockerignore sem o líder/
?node_modules
não funciona em subdiretórios.Para aqueles que não podem usar um arquivo .dockerignore (por exemplo, se você precisar do arquivo em uma CÓPIA, mas não em outra):
Sim, mas você precisa de várias instruções de CÓPIA. Especificamente, você precisa de uma CÓPIA para cada letra do nome do arquivo que deseja excluir.
Continue até ter o nome completo do arquivo ou apenas o prefixo que você tem certeza de que não terá outros arquivos.
fonte
COPY failed: no source files were specified
quando não houver arquivos começando com 'não', mas não 'aceno'.src/
vá/var/www
e/conf/nginx.conf
vá para/etc/nginx/conf.d/default.conf
. Além disso, você pode copiar tudo eRUN rm -r conf
mais tarde (também mantenha a árvore de origem). Gostaria de saber se alguém tem outra sugestão.COPY [^node_modules]*
para copiar todos os arquivos de nível superior.No meu caso, meu Dockerfile continha uma etapa de instalação, que produzia o
vendor
diretório (o equivalente em PHPnode_modules
). Então,COPY
este diretório passa para a imagem final do aplicativo. Portanto, eu não poderia colocarvendor
no meu.dockerignore
. Minha solução foi simplesmente excluir o diretório antes de executarcomposer install
(o equivalente em PHP anpm install
).Essa solução funciona e não incha a imagem final, mas não é ideal, porque o
vendor
diretório no host é copiado no contexto do Docker durante o processo de construção, o que aumenta o tempo.fonte
composer.lock
antescomposer install
. Sem o arquivo de bloqueio, um conjunto diferente de dependências (a pasta do fornecedor) pode ser instalado quando você criar na próxima vez.Adicionar .dockerignore funciona para mim. Um ponto adicional Para aqueles que estão tentando esta solução no Windows , o Windows não permitirá que você crie um arquivo .dockerignore (pois, por padrão, não permite a criação de arquivos começando com.)
Para criar esse arquivo começando com. no Windows , inclua também um ponto final, como:
.dockerignore.
e pressione enter (desde que você tenha ativado as opções de extensão de exibição nas opções de pasta)fonte
Excluindo node_modules do diretório atual
Excluindo node_modules em quaisquer subdiretórios imediatos
Aqui estão os documentos oficiais
fonte