ADDコマンドを使用して、Dockerの他のディレクトリにディレクトリをコピーします


382

http://docs.docker.com/engine/reference/builder/#addを読みましたが、問題が発生しました。ローカルディレクトリgoをdocker にコピーしたい/user/local/

私は試した:

ADD go /usr/local/

そして:

ADD /go/ /usr/local/ 

また:

RUN chmod 0755 /usr/local/go/src/make.bash

ただし、次のエラーメッセージ/usr/local/go/src/make.bash: No such file or directoryが表示されますが、ローカルgoディレクトリにはが含まれていますmake.bash

回答:


704
ADD go /usr/local/

Dockerイメージのディレクトリにローカルディレクトリの内容をコピーします。go/usr/local/

使用go中のディレクトリ自体をコピーするに/usr/local/は:

ADD go /usr/local/go

または

COPY go /usr/local/go

43
ADDの複数のソースバージョンを使用しようとしているため、宛先のターゲットディレクトリ名を指定できません。OPがマルチsrc形式で要求したことを実行する方法はありますか(つまりADD、各ソースディレクトリのレイヤーを作成せずに)?
Guss

9
または、その他のシェル変数は機能しないと言って$HOME、これに補足を追加したいだけです~。私がこれを言っているのは、ほとんどの人には明白なことですが、認めようとするよりも、これを理解しようとかなりの時間を費やしたからです。
2015

34
COPY go / usr / local / goは動作しません。コピーしません。
Tyguy7、2015

78
これは本当に混乱する問題です。なぜCOPY単純に振る舞えないのcpですか?代わりに、それがどのように機能するか追加の警察が必要です。
Zelphir Kaltstahl 2017年

14
.dockerignoreファイルはディレクトリを非表示にすることができ、リストされた項目に対してCOPYまたはADDは機能しません
Vereb

49

実際にADD go /usr/local/追加されますコンテンツgoフォルダをしていないフォルダ自体は、あなたがThomasleveilソリューションを使用することができるか、それが何らかの理由で仕事をしなかった場合は、変更することができますWORKDIR/usr/local/、その後のようにそれにディレクトリを追加します。

WORKDIR /usr/local/
COPY go go/

または

WORKDIR /usr/local/go
COPY go ./

しかし、複数のフォルダを追加したい場合は、そのように追加するのは面倒です。現在の問題からわかるように、現時点での唯一の解決策はCOPY . .、ですべての不要なディレクトリとファイルを使用して除外することです。.dockerignoreたとえば、フォルダとファイルを取得したとします。 :

- src 
- tmp 
- dist 
- assets 
- go 
- justforfun 
- node_modules 
- scripts 
- .dockerignore 
- Dockerfile 
- headache.lock 
- package.json 

そして私はsrc assets package.json justforfun goそう追加したいです:

Dockerfile:

FROM galaxy:latest

WORKDIR /usr/local/
COPY . .

.dockerignoreファイル内:

node_modules
headache.lock
tmp
dist

または、もっと楽しくするには(または、より多くの人々を混乱させて、同様に苦しませたい場合:P)、次のようにすることができます。

*
!src 
!assets 
!go 
!justforfun 
!scripts 
!package.json 

このようにして、すべてを無視しますが、「無視リスト」からのみコピーまたは追加したいものを除外します。

それは遅い答えですが、さらに多くのケースをカバーして同じことを行うためのより多くの方法を追加します。


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