Fenômeno do problema
Ao fazer uma imagem docker, é necessário copiar todos os arquivos e pastas em um determinado caminho para a imagem, e escrevi o seguinte dockerfile:
FROM alpine
WORKDIR /root/test_docker_proj
COPY * ./
A estrutura original do diretório é assim:
/projects/test_docker_proj
├── Dockerfile
├── dir1
│ ├── dir11
│ │ └── file11
│ └── file1
└── file2
No entanto, a estrutura de diretório copiada para a imagem docker torna-se esta:
/root/test_docker_proj
├── Dockerfile
├── dir11
│ └── file11
├── file1
└── file2
Pode ser visto que a pasta dir1 não foi copiada para o espelho, mas as subpastas e arquivos em dir1 foram copiados, e os arquivos no mesmo nível que dir1 também foram copiados. Em outras palavras, durante a execução de COPY, a pasta de primeiro nível foi "descompactada".
Lógica de comportamento COPY / ADD
Para determinar o comportamento de COPY e comandos ADD semelhantes, os seguintes testes foram feitos:
FROM alpine
WORKDIR /root/test_docker_proj_1
COPY * ./
WORKDIR /root/test_docker_proj_2
ADD * ./
WORKDIR /root/test_docker_proj_3
COPY ./ ./
WORKDIR /root/test_docker_proj_4
ADD ./ ./
WORKDIR /root/test_docker_proj_5
COPY ./dir* ./
WORKDIR /root/test_docker_proj_6
ADD ./dir* ./
Por meio de testes, podemos descobrir que o comando COPY / ADD possui várias regras:
- O comando ADD e o comando COPY se comportam da mesma forma ao copiar arquivos
- Ao usar * como a fonte do comando COPY / ADD, significa ./*
- Se a fonte do comando COPY / ADD for uma pasta, o conteúdo da pasta é copiado em vez de si mesmo
- O destino * em COPY ./* será traduzido na seguinte lógica:
COPY ./sub_dir1 target
COPY ./sub_dir2 target
COPY ./file1 target
COPY ./file2 target
As pastas e arquivos no sistema de arquivos são essencialmente arquivos. O comando cp do sistema operacional familiar tratará a pasta como um arquivo e a copiará para o caminho de destino ao executar cp * target. Pode-se considerar que o próprio arquivo é copiado .E o docker COPY / ADD copia seu conteúdo ao copiar pastas.
Essa lógica "estranha" do docker foi criticada por um longo tempo, mas não parece ter sido alterada. Para saber o progresso mais recente, consulte os dois problemas a seguir. Antes que o docker faça alterações, você só pode prestar atenção ao escrever dockerfile .
A pasta Docker COPY é inexplicavelmente ladrilhada
Autor:
link simpleapples : https: //www.jianshu.com/p/9b7da9aacd8a
Fonte: Os livros de Jane
são de propriedade do autor. Para reimpressões comerciais, entre em contato com o autor para autorização. Para reimpressões não comerciais, indique a fonte.