web-dev-qa-db-fra.com

Dockerfile copy garde la structure du sous-répertoire

J'essaie de copier un certain nombre de fichiers et de dossiers dans une image de docker créée à partir de mon hôte local.

Les fichiers sont comme ça:

folder1
    file1
    file2
folder2
    file1
    file2

J'essaie de faire la copie comme ceci:

COPY files/* /files/

Cependant, tous les fichiers sont placés dans/files/Y at-il un moyen dans Docker de conserver la structure du sous-répertoire et de copier les fichiers dans leurs répertoires?

180
user1220022

Retirer l'étoile de COPY, avec ce Dockerfile:

FROM ubuntu
COPY files/ /files/
RUN ls -la /files/*

La structure est là:

$ docker build .
Sending build context to Docker daemon 5.632 kB
Sending build context to Docker daemon 
Step 0 : FROM ubuntu
 ---> d0955f21bf24
Step 1 : COPY files/ /files/
 ---> 5cc4ae8708a6
Removing intermediate container c6f7f7ec8ccf
Step 2 : RUN ls -la /files/*
 ---> Running in 08ab9a1e042f
/files/folder1:
total 8
drwxr-xr-x 2 root root 4096 May 13 16:04 .
drwxr-xr-x 4 root root 4096 May 13 16:05 ..
-rw-r--r-- 1 root root    0 May 13 16:04 file1
-rw-r--r-- 1 root root    0 May 13 16:04 file2

/files/folder2:
total 8
drwxr-xr-x 2 root root 4096 May 13 16:04 .
drwxr-xr-x 4 root root 4096 May 13 16:05 ..
-rw-r--r-- 1 root root    0 May 13 16:04 file1
-rw-r--r-- 1 root root    0 May 13 16:04 file2
 ---> 03ff0a5d0e4b
Removing intermediate container 08ab9a1e042f
Successfully built 03ff0a5d0e4b
303
ISanych

Sinon, vous pouvez utiliser un "." au lieu de *, car cela prendra tous les fichiers du répertoire de travail, incluez les dossiers et sous-dossiers:

FROM ubuntu
COPY . /
RUN ls -la /
15
Sparkz0629

Pour fusionner un répertoire local dans un répertoire dans une image, procédez comme suit. Il ne supprimera pas les fichiers déjà présents dans l'image. Il n’ajoutera que les fichiers présents localement, en écrasant les fichiers de l’image si un fichier du même nom existe déjà.

COPY ./files/. /files/
3
Cameron Hudson