Search code examples
copydockerdockerfile

Dockerfile copy keep subdirectory structure


I'm trying to copy a number of files and folders to a docker image build from my localhost.

The files are like this:

folder1/
    file1
    file2
folder2/
    file1
    file2

I'm trying to make the copy like this:

COPY files/* /files/

However, all of the files from folder1/ and folder2/ are placed in /files/ directly, without their folders:

files/
    file1
    file2

Is there a way in Docker to keep the subdirectory structure as well as copying the files into their directories? Like this:

files/
    folder1/
        file1
        file2
    folder2/
        file1
        file2

Solution

  • Remove star from COPY, with this Dockerfile:

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

    Structure is there:

    $ 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