Przeczytałem http://docs.docker.com/engine/reference/builder/#add jednak napotkałem problem. Chcę skopiować katalog lokalny go
do okna dokowanego/user/local/
Próbowałem:
ADD go /usr/local/
i:
ADD /go/ /usr/local/
również:
RUN chmod 0755 /usr/local/go/src/make.bash
Widzę jednak następujący komunikat o błędzie, /usr/local/go/src/make.bash: No such file or directory
ale go
katalog lokalny zawiera make.bash
.
ADD
warstwy dla każdego katalogu źródłowego)?$HOME
albo~
czy jakakolwiek inna zmienna powłoki nie będą działać. Mówię to, ponieważ spędziłem sporo czasu, próbując to rozgryźć, niż chciałbym przyznać, chociaż dla większości jest to rażąco oczywiste.COPY
po prostu nie można się tak zachowywaćcp
? Zamiast tego musi być dodatkowa policja, jak to działa.Rzeczywiście
ADD go /usr/local/
doda zawartość zgo
folderu, a nie sam folder, można użyć Thomasleveil rozwiązanie lub jeśli to nie działa z jakiegoś powodu można zmienićWORKDIR
, aby/usr/local/
następnie dodać katalog do niego tak:lub
Ale jeśli chcesz dodać wiele folderów, dodawanie ich w ten sposób będzie denerwujące, jedynym rozwiązaniem na razie, jak widzę w moim bieżącym problemie, jest używanie
COPY . .
i wykluczanie wszystkich niechcianych katalogów i plików.dockerignore
, powiedzmy, że mam foldery i pliki :i chcę dodać,
src assets package.json justforfun go
więc:w Dockerfile:
w pliku .dockerignore:
Lub dla większej zabawy (lub chcesz pomylić więcej osób, które również cierpią: P) może być:
W ten sposób ignorujesz wszystko, ale wykluczasz to, co chcesz skopiować lub dodać tylko z „listy ignorowanych”.
Jest to odpowiedź późna, ale dodaje więcej sposobów, aby zrobić to samo, obejmując jeszcze więcej przypadków.
źródło
Możesz użyć KOPIUJ. Musisz jawnie określić katalog. Nie zostanie stworzony sam
Odniesienie: Odniesienie do dokowania CP
źródło