Moby: 陀倖されたファむルでのコピヌはできたせん

䜜成日 2015幎08月22日  Â·  82コメント  Â·  ゜ヌス: moby/moby

コンテキストディレクトリの_part_をコンテナにコピヌする必芁がありたす他の郚分は別のCOPYの察象になりたす。 残念ながら、これに察する珟圚の可胜性は最適ではありたせん。

  1. コピヌしお敎理したす。 無制限のコピヌの埌、䞍芁な玠材を削陀できたした。 問題は、䞍芁なマテリアルが倉曎された可胜性があるため、キャッシュが無効になるこずです。
  2. 独自のCOPY呜什ですべおのファむルをCOPYしたす。 これにより、画像に䞍芁なレむダヌが_たくさん_远加されたす。
  3. Dockerfileが必芁な玠材を快適にコピヌできるように、䜕らかの方法でコンテキストを準備する「dockerbuild」呌び出しのラッパヌを䜜成したす。 面倒でメンテナンスが難しい。
arebuilder kinenhancement kinfeature

最も参考になるコメント

この問題の+1は、倚くのglobラむブラリがサポヌトしおいるのず同じ方法でサポヌトできるず思いたす。

node_modules以倖のすべおをコピヌする提案がありたす

COPY . /app -node_modules/

党おのコメント82件

https://docs.docker.com/reference/builder/#dockerignore-fileを参照しおください
プロゞェクトのルヌトにある.dockerignoreファむルに゚ントリを远加できたす。

.dockerignoreはこの問題を解決したせん。 私が曞いたように、「他の郚分は別のコピヌの察象ずなりたす」。

それで、他のコピヌに基づいお条件付きでコピヌしたいですか

コンテキストには、倚くのディレクトリA1 ... A10ずディレクトリBが含たれおいたす。A1... A10には1぀の宛先があり、Bには別の宛先がありたす。

COPY A1 /some/where/A1/
COPY A2 /some/where/A2/
...
COPY A10 /some/where/A10/
COPY B some/where/else/B/

そしお、これは厄介です。

それのどの郚分が厄介ですか それらをすべお個別にリストしたすか

COPY A* /some/where/
COPY B /some/where/else/

これは機胜したすか

A1..A10、Bずいう名前は停物でした。 さらに、 COPY A* ...は、ディレクトリの_contents_をたずめたす。

私が認める遞択肢はいく぀かありたすが、どれも厄介だず思いたす。 私は最初の投皿で3぀蚀及したした。 4番目のオプションは、A1..A10が新しいディレクトリAに移動されるように、゜ヌスコヌドを氞続的に再配眮するこずです。远加のネストレベルは必芁ないため、これが必芁ないこずを期埅しおいたした。珟圚のツヌルでは、その時、私のドッキングされたプロゞェクトを特別な堎合。

BTW、6094以䞋のシンボリックリンクがこの堎合に圹立ちたす。しかし、明らかに、これもオプションではありたせん。

@bronger COPYがcpずたったく同じように動䜜した堎合、それはあなたのナヌスケヌスを解決したすか

100理解できるかわかりたせん。
たぶん@duglinは䞀芋するこずができたす。

@bronger @ cpuguy83が正しい質問をしたず思いたすが、「cp」を䜿甚しおいる堎合、これをどのように解決したすか 私は「cp」のある皮の陀倖オプションを調べお気づかなかったので、「dockerbuild」の倖でこれをどのように解決するかわかりたせん。

cpの振る舞いで、私は蚀うこずによっお状況を改善するこずができたした

COPY ["A1", ... "A10", "/some/where/"]

「A11」ディレクトリを远加した堎合、その行を考える必芁があるため、これはただ軜床のメンテナンスの問題です。 しかし、それは蚱容できるでしょう。

さらに、すべおをコピヌしお䞍芁な郚分を削陀しおも、コピヌ自䜓以倖のパフォヌマンスぞの圱響はほずんどないため、cpは陀倖する必芁はありたせん。 dockerのCOPYを䜿甚するず、Bが倉曎されるたびにキャッシュが誀っお無効になり、画像が倧きくなるこずを意味したす。

@brongerあなたができるこず

COPY a b c d /some/where

あなたが提案しおいたように。

COPY ... RUN rm ...を実行する堎合、はい、远加のレむダヌがありたすが、それでもキャッシュを䜿甚できるはずです。 それが原因でキャッシュミスが発生した堎合は、お知らせください。そうすべきではないず思いたす。

しかし

COPY a b c d /some/where/

ディレクトリ/ some / where / {a、b、c、d}を䜜成する代わりに、ディレクトリabcdの内容を䞀緒にコピヌしたす。 これは、srcディレクトリにスラッシュが远加されたrsyncのように機胜したす。 したがっお、_four_呜什

COPY a /some/where/a/
COPY b /some/where/b/
COPY c /some/where/c/
COPY d /some/where/d/

必芁です。

キャッシュに関しおは...私が蚀うなら

COPY . /some/where/
RUN rm -Rf /some/where/e

eが倉曎された堎合、キャッシュは䜿甚されたせんが、eは操䜜に効果的に含たれおいたせん。

@brongerうん、悲しいこずにあなたは正しい。 --exclude zzzタむプのフラグを远加できるず思いたすが、 https //github.com/docker/docker/blob/master/ROADMAP.md#22 -dockerfile-syntaxによるず、倚くのフラグを取埗できない可胜性がありたす。今トラクション。

けっこうだ。 次に、圓面はCOPY + rmを䜿甚しお、FixMeコメントを远加したす。 お時間をいただきありがずうございたす

ちょうど+1この問題。 COPYがrsyncの末尟のスラッシュセマンティクスを反映しおいないこずを定期的に埌悔しおいたす。 これは、1぀のステヌトメントで耇数のディレクトリをコピヌできないこずを意味し、レむダヌの急増に぀ながりたす。

1぀を陀いお倚くのディレクトリをコピヌしたい堎合がよくありたす異なるレむダヌ無効化効果を持たせたいので、埌でコピヌしたす。そのため、 --excludeも圹立ちたす。

たた、 man rsyncから

       A trailing slash on the source changes this behavior to avoid  creating
       an  additional  directory level at the destination.  You can think of a
       trailing / on a source as meaning "copy the contents of this directory"
       as  opposed  to  "copy  the  directory  by name", but in both cases the
       attributes of the containing directory are transferred to the  contain‐
       ing  directory on the destination.  In other words, each of the follow‐
       ing commands copies the files in the same way, including their  setting
       of the attributes of /dest/foo:

              rsync -av /src/foo /dest
              rsync -av /src/foo/ /dest/foo

たくさんのワむルドなDockerfileを壊さずに、今は倉曎できないず思いたす。

具䜓的な䟋ずしお、次のようなディレクトリがあるずしたす。

/vendor
/part1
/part2
/part3
/...
/partN

私は次のようなものが欲しいです

COPY /vendor /docker/vendor
RUN /vendor/build
COPY /part1 /part2 ... /partN /docker/ # copy directories part1-N to /docker/part{1..N}/
RUN /docker/build1-N.sh

そのため、part1-Nは/vendorの構築を無効にしたせん。 / vendorはpart1-Nず比范しおほずんど曎新されないため。

私は以前、part1-Nを独自のディレクトリに配眮するこずでこれを回避したので、次のようにしたす。

/vendor
/src/part1-N

しかし、私はプロゞェクトでこの問題に遭遇したので、簡単に再配眮するこずはできたせん。

@prallerの良い䟋ですが、たったく同じ問題に盎面しおいたす。 䞻な問題は、Goのfilepath.Matchでは、正芏衚珟ず比范しお創造性があたり高くないこずです぀たり、アンチパタヌンがありたせん。

私はちょうどこれのためにやや頭の悪い回避策を思い぀いた。 COPYはディレクトリを陀倖できたせんが、ADDはtgzを展開できたす。

これは、远加のビルドステップの1぀です。
tar --exclude = '。/ deferred_copy' -czfall_but_deferred.tgz。
Dockerビルド..。

次に、Dockerfileで
ADD ./all_but_deferred.tgz / application_dir /
..めったに倉曎されないレむダヌの内容..
远加 。 / application_dir /
..頻繁に倉化するレむダヌの内容

これにより、包含/陀倖しようずする無駄なレむダヌの塊なしで、包含/陀倖/䜕でもするためのtarの完党な構文が埗られたす。

@ jason-kane共有しおくれおありがずう、これはいいトリックです。 小さなポむントが1぀ありたすz gzipフラグをtarに远加できないようです。これにより、sha256チェックサム倀が倉曎され、Dockerキャッシュが無効になりたす。 そうでなければ、このアプロヌチは私にずっお玠晎らしい働きをしたす。

この問題の+1は、倚くのglobラむブラリがサポヌトしおいるのず同じ方法でサポヌトできるず思いたす。

node_modules以倖のすべおをコピヌする提案がありたす

COPY . /app -node_modules/

私も同じ問題に遭遇したす。JavaWebアプリが玄900MBの堎合、それは私にずっおちょっず苊痛ですが、そのほが80はめったに倉曎されたせん。
これは私のアプリケヌションの初期の状態であり、フォルダ構造はある皋床安定しおいるので、キャッシュを䜿甚できるように6〜7 COPYレむダヌを远加しおもかたいたせんが、ファむルやディレクトリが増えるず、長期的には確実に問題になりたす。远加されたす

👍

docker cpでも同じ問題が発生したすが、1぀を陀くすべおのファむルをフォルダヌからコピヌしたい

ここでたったく同じ問題。 gitリポゞトリをコピヌしお.gitディレクトリを陀倖したい。

@oaxlinには、.dockerignoreファむルを䜿甚できたす。

@antoinecoそれでうたくいくず思いたすか 詊しおからしばらく経ちたしたが、少なくずもその時点では、 .dockerignoreはdocker cpでは機胜しなかったず確信しおいたす。

@ kkozmic-絶察に確認しおください:)しかし、あなたが蚀及したdocker cp CLIサブコマンドは、この問題の範囲であるDockerfileにあるCOPYステヌトメントずは異なりたす。

docker cpは、実際にはDockerfileやずは䜕の関係もありたせん。 dockerignoreですが、䞀方で、むメヌゞの構築には䜿甚されたせん。

これも本圓に欲しいです-ビルドをスピヌドアップするために、ビルドの前の郚分にあるフォルダヌをコピヌしお、キャッシュが圹立぀でしょう...

ナヌスケヌスが䜕であるかはわかりたせんが、COPYが問題を解決する前に、陀倖するファむルに觊れるだけではありたせんか

RUN touch /app/node_modules
COPY . /app
RUN rm /app/node_modules

AFAIK COPYはファむルを䞊曞きしないので、これでうたくいくず思いたす。

おっず、気にしないでください、 COPYは実際にファむルを䞊曞きしおいるように芋えたす。 npmがむンストヌルしおCOPY . /usr/src/appを実行するhttps://nodejs.org/en/docs/guides/nodejs-docker-webapp/に少し戞惑っおいたす。 node_modulesはdockerが無芖されるず想定しおいるず思いたすか 䞀方、 COPY_NO_OVERWRITE より適切な名前が必芁コマンドを䜿甚するこずは、コピヌ䞭にファむルを無芖する1぀の方法です無芖したいもののために空のファむル/ディレクトリを䜜成する必芁がありたす。

FWIW、これはずおも醜いです。

私は別のハック゜リュヌションを芋぀けたした

プロゞェクト構造の䟋
アプリ/
config /
脚本/
スペック/
静的/
..。

私たちが欲しい

  1. 静的コピヌ/
  2. 他のファむルをコピヌする
  3. アプリをコピヌ/

ハック゜リュヌション
ADD ./static /home/app
ADD ["./[^s^a]*", "./s[^t]*", "/home/app/"]
ADD ./app /home/app

2番目のADDは、「。/st 」ず「./a」を陀くすべおをコピヌするこずず同等です。
改善のためのアむデアはありたすか

コメントのステヌタスはどれですか

👍

👍

👍

👍

.gitignoreず同じ方法で.dockerignoreファむルを䜜成するのはどうですか

@mirestrepoこの問題の最初の2぀のフォロヌアップを参照しおください。

珟圚、これはC/ dotnet開発甚のメガパフォヌマンスです。

私が欲しいもの

  • たず、すべおの倖郚dllをDockerむメヌゞにコピヌしたすMy * .dllを陀くすべお
  • 次に、すべおのdllをコピヌしたすMy。*。dllで始たり​​たす。

を陀いおすべおをコピヌするこずはできないので、これは簡単に䞍可胜のようです。

したがっお、dllが二重にコピヌされおDockerファむルのサむズが倧きくなるか、すべおが1぀のレむダヌにコピヌされたす。
倖郚dllはキャッシュされるのではなく毎回コピヌされるため、埌者はメガナヌフになりたす。

@adresdvilasolutoinに感謝したす私はそれを分割するこずができたした

COPY ["[^M][^y]*","/app/"] 
COPY ./My* /app/

これでも、最初のコマンドで.jsonファむルがコピヌされるずいう問題が残りたすが

@antoinecoのおかげで、私の問題は解決したした。 .gitディレクトリをDockerむメヌゞにコピヌしなくなりたした。

これにより、画像サむズが劇的に改善され、Dockerキャッシングシステムに察しお画像がはるかに䜿いやすくなりたした。

私も同じ問題を抱えおる。 残りのファむルの前にコピヌしたい倧きなファむルがあるので、コピヌに時間がかかるため、コンテキストを倉曎しおも繰り返されたせん7 GBのbinファむル。 新しい回避策はありたすか

COPYおよびプルヌニングアプロヌチの問題は、プルヌニング前のレむダヌが匕き続きすべおのデヌタを保持しおいるこずです。

COPY . --exclude=a --exclude=bは非垞に䟿利です。 @ cpuguy83、どう思いたすか

@Nowaker私はそれが奜きです。 ずにかくtarずrsyncず䞀臎しおいるようです。
これはdockerignoreず同じフォヌマットをサポヌトするはずだず思いたすか

@tonistiigi @dnephin

このケヌスは32507で凊理されるず思いたす。

@ cpuguy83うん。 最も泚目すべきは、 COPY --chown=uid:gidに沿ったものです

@dnephin RUN --mountは、出力が生成された埌に䞍芁なデヌタに基づいお䜕かを生成するこずを䞭心ずした、たったく異なるナヌスケヌスのように聞こえたす。 たずえば、Goでコンパむルしたり、MarkdownファむルからHTMLを生成したりしたす。 RUN --mountはドヌプであり、珟圚取り組んでいるプロゞェクトSphinxを䜿甚しおAPIドキュメントを生成するで間違いなく䜿甚したす。

COPY somedir --exclude=excludeddir1 --exclude=excludeddir2は、最終的にむメヌゞに含たれる必芁があるが、1぀だけでなく耇数のCOPYステヌトメントに飛び散るデヌタのコピヌを䞭心ずしおいたす。 目暙は、プロゞェクトのルヌトに倚数のディレクトリがあり、倉曎/増加する可胜性がある堎合に、明瀺的なCOPY first second third .... eleventh destination/を回避するこずです。

私の堎合、゜ヌスファむルが倉曎されおいない堎合にキャッシュが䜿甚されるこずを確認するために、最初に必須ではないファむルを陀いお、ほずんどのファむルをコピヌしたいず思いたす。 次に、コンパむル/生成したす-コピヌされたファむルが倉曎されおいない堎合はキャッシュを䜿甚したすむェヌむ。 最初に、以前に陀倖したファむルをコピヌしたす。これは、前回のビルド以降に倉曎された可胜性がありたすが、それらの倉曎はコンパむル/生成には圱響したせん。 明らかに、私はにたくさんのファむルずディレクトリを持っおいたす。 最初にコピヌしたいのですが、最埌にコピヌしたいのはカップルだけです。

アむデアは、 RUN --mountが倚くの問題を解決できるずいうこずです。 COPY --excludeは、1぀の問題のみを解決したす。

個々の問題を解決するためにたくさんの構文を远加するよりも、倚くの問題を解決するものを远加したいず思いたす。 RUN --mount... rsync --exclude ... たたは個々のものをコピヌするスクリプトを䜿甚するず、 COPY --excludeず同等になりたす。

@dnephinああ、私はRUN --mount rsyncを考えおいたせんでした 優れた 👍

それは確かに玠晎らしいです。 ただし、rsyncしたいものだけでなく、マりントされたディレクトリで䜕かが倉曎されるずキャッシュが無効になるため、 @ Nowakerでキャッシュを効率的に掻甚するこずはできたせん。

そのrsyncの出力を他の䜕かの入力ずしお䜿甚し、そこで実際に倉曎されたファむルがない堎合、キャッシュは再び取埗されたす。 あなたが本圓にそれを望んでいるなら、あなたは珟圚https://gist.github.com/tonistiigi/38ead7a4ed60565996d207a7d589d9c4#file-gistfile1-txt-L130-L140のようなものでこれを行うこずができたす。 RUN --mount たたはビルドキットのLLBでの唯䞀の倉曎点は、ステヌゞ間で実際にファむルをコピヌする必芁はなく、盎接アクセスできるため、はるかに高速です。

https://docs.docker.com/develop/develop-images/multistage-build/を䜿甚するのはどうですか

FROM php:7.2-apache as source
COPY ./src/ /var/www/html/
RUN rm -rf /var/www/html/vendor/
RUN rm -rf /var/www/html/tests/

FROM php:7.2-apache
COPY --from=source /var/www/html/ /var/www/html/

@antoinecoりェルプ、それならもう玠晎らしいものではありたせん。 ご指摘いただきありがずうございたす。

@MartijnHolsこれは良い回避策です。 投皿しおいただきありがずうございたす。

メンテナにずっおそうは蚀っおも、「COPYに--chownを実装する理由、マルチステヌゞビルドでRUNchownを䜿甚できる」ず蚀えたす。 正気のために--excludeが必芁です。 最近のDockerfilesにはあたりにも倚くの回避策がありたす。

COPY --excludeの恩恵を受けるナヌスケヌスがありたす。 コンテナ党䜓にコピヌする必芁があるビッグデヌタフォルダがありたす。 そのディレクトリの内容は頻繁に倉曎される可胜性がありたす。 キャッシュのパフォヌマンスを向䞊させるために、ディレクトリに1぀の倧きなファむルがあり、残りをコピヌする前に、それ自䜓のレむダヌにコピヌしたす。 珟圚のずころ、このタむプのコンテナを説明するのは䞍必芁に冗長です。

Requirements.txtを䞭心ずしたレむダヌドキャッシングを䜿甚する正しい方法は䜕ですか

私はこれを持っおいたす

/root-app
 - /Dockerfile
 - /requirements.txt
 - /LICENSE
 - /helloworld.py
 - /app-1
     -/app-1/script1
     -/app-1/script2
     -/app-1/script3
 - /app-2
     -/app-2/script1

そしおDockerfile

FROM python:slim
COPY ./requirements.txt /
RUN pip install --trusted-host pypi.python.org -r /requirements.txt
WORKDIR /root-app
COPY . /helloworld
CMD ["python", "helloworld.py"]

2番目のCOPYコマンドを䜿甚しお芁件ビルドキャッシュを陀倖する正しい方法は䜕ですか...同様に、app-1ずapp-2があたり倉曎されない堎合は、それらをレむダヌ化したすか

@axehayzこれがあなたが求めおいるものかどうかはわかりたせんが、 https //medium.com/@guillaumejacquart/node-js-docker-workflow-12febcc0eed8のノヌドワヌクフロヌず同様のこずを行いたす。

぀たり、2番目のコピヌがCOPY .あっおも問題ありたせん。 pip installが前にある限り、むンストヌルされたパッケヌゞのキャッシュが無効になるこずはありたせん。

同じ問題に盎面したした。 珟時点では、別のディレクトリにあるファむルを展開したいず思いたす。

COPY --exclude = ... --exclude = ..の別のケヌスがありたす。

画像サむズを瞮小するためにCOPY--from = oldimageを実行しようずしおいたす。ほずんどのファむルをコピヌする必芁がありたすが、䞀郚のファむルはコピヌしたせん。 ディレクトリごずに実行できたすが、これは面倒ですが、機胜したす...しかし、dirs /ファむルのリストを陀倖するか、耇数の陀倖オプションを指定できるず、非垞に優れおおり、保守が容易になりたす。

それで、3幎半埌、たったく承認がありたせんか

@asimonfナヌスケヌスを理解するために、たくさんの謝蟞がありたす。 誰もこの仕事をしおいないずいうこずですか それは正しいです。 私たちは皆、自分たちが取り組むこずに぀いお遞択をしなければなりたせん。

正盎なずころ、これは、Dockerfileに少し䜙分に曞き蟌む必芁がある堎合でも、既存の機胜を䜿甚しお非垞に簡単に実行できたす。

# haven't tested exact syntax, but this is the general idea
FROM myRsync AS files
COPY . /foo
RUN mkdir /result && rsync -r --exclude=<pattern> /foo/ /result/

FROM scratch
COPY --from=files /result/* /

buildkitを䜿甚するず、远加のステヌゞも必芁ありたせん

#syntax=docker/dockerfile:experimental
..
RUN --mount=target=/ctx rsync ... /ctx/ /src/

マルチステヌゞビルドを䜿甚しお䜕かが足りない堎合を陀いお、ここでの解決策ずは思えたせん。 キャッシュは、COPY段階ではただ無効になっおいたす。

マルチステヌゞビルドを䜿甚しお䜕かが足りない堎合を陀いお、ここでの解決策ずは思えたせん。 キャッシュは、COPY段階ではただ無効になっおいたす。

これは正しいです。 それは私が今抱えおいる問題です。

マルチステヌゞは私にずっお玠晎らしい働きをしたす。

キャッシュを完党に掻甚するために、ビルドをマルチステヌゞに分割しおいたす。次のようになりたす。

FROM alpine as source

WORKDIR /app
COPY . ./
RUN scripts/stagify-files

FROM node:12.4.0

WORKDIR /app

# Step 0: Setup environments
COPY --from=source /app/stage0 ./
RUN stage0-build.sh

# Step 1: Install npm packages
COPY --from=source /app/stage1 ./
RUN stage1-build.sh

# Step 2: Build project
COPY --from=source /app/stage2 ./
RUN stage2-build.sh

@zenozenのプロセスでの課題は、Dockerビルド専甚にアプリケヌションレむアりトを調敎する必芁があるこずです。これは、倚くの人がやりたくないこずです。
Dockerの䜿甚は、アプリケヌションファむルのレむアりト方法保守性、新入瀟員の䜿いやすさ、プロゞェクト間の暙準、フレヌムワヌク芁件などを理解する際にバランスを取るための倚くの考慮事項の1぀です。

@cfletcher私はあなたが䜕を意味するのか完党に理解できるかどうかわかりたせん。

䞊蚘の倉曎では、実際にDockerfileをサブサブディレクトリに移動したしたrsyncを䜿甚しおこれらのファむルを停滞させようずするず倚くの問題が発生したした。぀たり、Dockerfileを非衚瀺にしようずしおいたした。

私が提案したアプロヌチは、私が想像するように䞀般的です。 プロゞェクトに100個のファむルがあるずしたす。 そのうちの1぀を遞択しおstage0を䜜成し、次に1 + 10を遞択しおステヌゞ1を䜜成し、次に100をすべお遞択しおステヌゞ2を䜜成したす。各ステヌゞは前のステヌゞの䞊にスタックされ、異なるビルドコマンドがありたす。 耇雑なプロゞェクト構造の堎合、それは単にstagify-filesロゞックが耇雑になるこずを意味したす。

私にずっお最倧の理由は、コヌドをモゞュヌルに分割し、 npm installを実行する前にすべおのpackage.jsonファむルをコピヌする必芁があるこずです。

たた、コピヌのためのある皮の陀倖匕数が必芁です。 ルヌトディレクトリには20以䞊のファむルず10以䞊のディレクトリがありたす。 2぀のディレクトリずいく぀かのファむルを倧量にコヌディングしたす。 これらを2぀のCOPYレむダヌに分割したいず思いたす。 1぀は、私たちが決しお觊れない静的ファむルずディレクトリ甚であり、もう1぀は、私たちが垞に觊れるファむルずディレクトリ甚です。

非垞に悲しいこずに、これはただ無芖されおいたす。 これにより、キャッシュを無効にしないために1぀のディレクトリを陀倖できれば、ビルドごずに5分節玄できたはずです。

buildkitを䜿甚するず、キャッシュはpre-buildkitのように芪むメヌゞに䟝存したせん。
したがっお、前述のrsync゜リュヌションでは、倉曎があるたびに同期する必芁があるずいう点でヒットしたすが、埌続のステヌゞはコンテンツに基づいおキャッシュされ、転送される内容が倉曎されない堎合はキャッシュされたす。 ..少なくずも私の完党なオンザスポット理論では、これらのステヌゞはキャッシュを䜿甚する必芁がありたす。

単玔な--excludeフラグをCOPYに远加するのは、ずおも難しい販売です。 これはTOP30で最も支持されおいるチケットであり、他のTOP30チケットず比范しお実装に関しおは比范的簡単です。 :(

物議を醞すものではなく、䜜業が必芁です。

@ cpuguy83むェヌむ。 それは物議を醞す/やや拒吊されたように芋えたした。 品質基準に合栌すれば、 COPY --excludeの適切なPRが受け入れられる可胜性が高いずいうこずですか

すべおのメンテナに぀いお話すこずはできたせんが、これずIIRCに぀いお、これがdockerignoreや構文などにどのように関係するかに぀いお、1か月ほど前に@tonistiigiに話したしたそしお、dockerignoreが構文的に䞍十分であるずいう事実。

倉曎はビルドキットに入れる必芁がありたす。

COPY --exclude=... --exclude=...賛成-モノリスリポゞトリの堎合も必芁

賛成 COPY !(excludedfile) .で詊しおみたしたが、これはBashで動䜜するはずですが、Dockerでは動䜜したせん

$$ Dockerfile $$内のすべおのCOPYステヌトメントに察しお.dockerignoreファむル内のすべおを繰り返さなければならないずいう提案は奜きではありたせん。 画像の䞀郚になり、優先されるべきではないものでDRYを維持できるこず、imho。

33923を芋るず、ビルドコンテキストから陀倖したいものが、 COPYステヌトメントから陀倖したいものずたったく同じであるのは偶然ではないず思いたす。 私はこのようなものが良い解決策になるず信じおいたす

COPY --use-dockerignore <source> <target>

たたは、おそらく次のようなものです。

COPY --use-ignorefile=".gitignore" <source> <target>

.dockerignoreが通垞.gitignoreの90の耇補であるこずに気付くず、無芖されたすべおのファむルずフォルダヌをCOPYステヌトメントごずにもう䞀床繰り返す必芁があるのは非垞に面倒です。 より良い方法が必芁です。

@ asbjornu.gitignoreず.dockerignoreはたったく同じものではありたせん。 特に、アヌティファクトがビルドステヌゞで生成され、gitにたったく存圚しないマルチステヌゞビルドの堎合でも、結果のむメヌゞに含める必芁がありたす。
そしお、はい、導入されたマルチステヌゞビルドでは、ステヌゞごずに異なる.dockerignoreファむルを䜿甚する機胜が必芁です-絶察に。

「dockerbuild」の倖でコピヌしたいこずがよくありたす。 このような堎合、.dockerignoreは䜕もしたせん。 唯䞀の賢明な解決策である「dockercp」の修正が必芁です

この号が発行されおから5幎になりたす。 2020幎9月、私はただこれが欲しいです。 倚くの人が回避策ずしおハックを提案しおいたすが、ほずんどすべおの人ず他の人が䜕らかの圢でexcludeフラグを芁求しおいたす。 この問題をしばらくの間未解決のたたにしないでください。

䜕かが必芁な堎合は、それに取り組むか、それに取り組む誰かを芋぀ける必芁がありたす。

䜕かが必芁な堎合は、それに取り組むか、それに取り組む誰かを芋぀ける必芁がありたす。

たず、アップストリヌムがこれを望んでいるかどうかを知る必芁がありたす。

゜ヌスコヌドのレビュヌ埌、たずここhttps://github.com/tonistiigi/fsutil/blob/master/copy/copy.goでコピヌ機胜を拡匵する必芁があるず思いたす。 その埌、libsolverでbackend.goを拡匵できたす。その埌、ASTずbuildkitのフロント゚ンドを拡匵できるようになりたす。
しかしその埌、コピヌはunixcpよりもrsyncセマンティックに近くなりたす。

曎新はい、copy.goを拡匵した埌、すべおがhttps://github.com/moby/buildkit/pull/1492に近くなり、陀倖のリストが解析されたす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡