Dockerfileコピーはサブディレクトリ構造を維持します


256

多くのファイルとフォルダーを私のローカルホストからDockerイメージビルドにコピーしようとしています。

ファイルは次のとおりです。

folder1
    file1
    file2
folder2
    file1
    file2

私はこのようなコピーを作成しようとしています:

COPY files/* /files/

ただし、すべてのファイルは/ files /に配置されます。Dockerでサブディレクトリ構造を維持し、ファイルをディレクトリにコピーする方法はありますか?


1
どのような結果が得られ、どのような結果が期待されるかを明確にできますか?
Thomasleveil、

回答:


413

このDockerfileを使用して、COPYからスターを削除します。

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

構造があります:

$ 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

64
しかし、次のようなファイルが必要な場合はどうなりますCOPY files/*1 /files/か?
Pavel Agarkov

1
これにより、そのディレクトリ内の既存のファイルも上書きされますか?
のChander

1
@chander、はい、既存のファイルは上書きされます
ISanych '

4
ここでの秘訣は、1つのソースディレクトリと1つのターゲットディレクトリが指定されていることです。他の組み合わせでは、ソースディレクトリの内容がターゲットディレクトリにコピーされます。
Marcin

RUN ls -la /files/*のコンソール出力から直接の出力を見ることができませんでしたdocker build。私が代わりにコンテナにはsshを行ってきましたので、直接実行するlsと、ホスト上で直接docker exec -it <container name> /bin/bash
somenickname

31

または、「。」を使用できます。*の代わりに、作業ディレクトリ内のすべてのファイルを取得するため、フォルダーとサブフォルダーを含めます。

FROM ubuntu
COPY . /
RUN ls -la /

1
「.git」ディレクトリのような隠しファイルとディレクトリが含まれますか?
BrunoNegrãoZica

7
@BrunoNegrãoZica、.dockerignore fileを使用して、コピー操作中に無視するファイル/フォルダーを指定できます。遅いですが、それが他の誰かの役に立つことを願っています
Hellaren

21

するにはマージ画像内のディレクトリにローカルディレクトリを、これを行います。画像内にすでに存在するファイルは削除されません。ローカルに存在するファイルのみが追加され、同じ名前のファイルがすでに存在する場合は、イメージ内のファイルが上書きされます。

COPY ./files/. /files/
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.