Скопируйте каталог в другой каталог в Docker, используя команду ADD

Я прочитал 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.

Ответ 1

ADD go /usr/local/

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

Чтобы скопировать каталог go в /usr/local/, используйте:

ADD go /usr/local/go

или

COPY go /usr/local/go

Ответ 2

Действительно, ADD go/usr/local/ будет добавлять содержимое папки go а не саму папку, вы можете использовать решение Thomasleveil или, если по какой-то причине это не сработало, вы можете изменить WORKDIR на /usr/local/ затем добавить в него свой каталог. лайк:

WORKDIR /usr/local/
COPY go go/

или же

WORKDIR /usr/local/go
COPY go ./

Но если вы хотите добавить несколько папок, это будет раздражать, добавляя их таким образом, пока единственное решение, как я вижу из моей текущей проблемы, это использование COPY.. 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 

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

Это поздний ответ, но он добавляет больше способов сделать то же самое, покрывая еще больше случаев.

Ответ 3

Вы можете использовать COPY. Вам нужно указать каталог явно. Он не будет создан сам по себе

COPY go /usr/local/go

Ссылка: ссылка Docker CP