A pasta Docker COPY é inexplicavelmente ladrilhada

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:

  1. O comando ADD e o comando COPY se comportam da mesma forma ao copiar arquivos
  2. Ao usar * como a fonte do comando COPY / ADD, significa ./*
  3. Se a fonte do comando COPY / ADD for uma pasta, o conteúdo da pasta é copiado em vez de si mesmo
  4. 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.

Acho que você gosta

Origin blog.csdn.net/yao_zhuang/article/details/114383125
Recomendado
Clasificación