Скопіюйте каталог в інший каталог на Docker за допомогою команди ADD


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/

буде скопіювати вміст вашого локального goкаталогу в /usr/local/каталог вашого зображення докера.

Щоб скопіювати використовуваний goкаталог /usr/local/:

ADD go /usr/local/go

або

COPY go /usr/local/go

43
Я намагаюся використовувати декілька вихідних версій ADD, і тому я не можу вказати ім'я цільового каталогу для місця призначення. Чи є спосіб зробити те, що запитував ОП у форматі multi-src (тобто, не створюючи ADDшару для кожного вихідного каталогу)?
Гасс

9
Я просто хочу , щоб додати Sidenote до цього, кажучи , що $HOMEабо ~будь-якої іншої змінної оболонки не буде працювати. Я говорю це, тому що витратив добру суму, намагаючись зрозуміти це, ніж хотів би визнати, хоча для більшості це очевидно.
крик

34
КОПІЯ go / usr / local / go не працює для мене. Не копіює.
Tyguy7

78
Це справді досить заплутана справа. Чому COPYпросто не можна так поводитись cp? Натомість потрібна додаткова поліція, як це працює.
Зельфір Кальтшталь

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 

Таким чином ви ігноруєте все, але виключаєте те, що хочете скопіювати або додати лише зі "списку ігнорування".

Це пізня відповідь, але додавання більше способів зробити те саме, що охоплює ще більше випадків.


12

Ви можете скопіювати COPY. Каталог потрібно вказати чітко. Він не створиться сам по собі

COPY go /usr/local/go

Довідка: Довідка по CP CP

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.