Mam w Dockerfile
COPY . .
Chcę wykluczyć cały katalog, w moim przypadku, katalog_węzłów.
Coś takiego:
COPY [all but **/node_modules/**] .
Czy jest to możliwe dzięki Dockerowi?
docker
dockerfile
docker-copy
Alexander Mills
źródło
źródło
.dockerignore
?Odpowiedzi:
Utwórz plik
.dockerignore
w katalogu kontekstowym kompilacji dokera (więc w tym przypadku najprawdopodobniej katalog, który jest rodzicem modułów_węzła) z jednym wierszem:chociaż prawdopodobnie po prostu chcesz:
Informacje o dockerignore: https://docs.docker.com/engine/reference/builder/#dockerignore-file
źródło
/config/nginx/ /config/logstash/
znajduję to w bashu kontenerowym:ls config/ gunicorn logs logstash nginx
ls /config/
, czy próbowałeś dodać te ścieżki do swojego .dockerignore bez wiodącego/
?node_modules
nie działa w podkatalogach.Dla tych, którzy nie mogą korzystać z pliku .dockerignore (np. Jeśli potrzebujesz pliku w jednym KOPII, ale nie w innym):
Tak, ale potrzebujesz wielu instrukcji KOPIOWANIA. W szczególności potrzebujesz KOPII dla każdej litery w nazwie pliku, którą chcesz wykluczyć.
Kontynuuj, dopóki nie otrzymasz pełnej nazwy pliku lub tylko prefiksu, co do którego masz pewność, że nie będzie żadnych innych plików.
źródło
COPY failed: no source files were specified
gdy nie będzie żadnych plików zaczynających się od „nie”, ale nie „skinienie”.src/
przejść do/var/www
i/conf/nginx.conf
przejść do/etc/nginx/conf.d/default.conf
. Możesz także skopiować wszystko, aRUN rm -r conf
później (także zachować drzewo źródłowe, jak było). Chciałbym usłyszeć, czy ktoś ma inną sugestię.COPY [^node_modules]*
aby skopiować wszystkie pliki najwyższego poziomu.W moim przypadku mój plik Docker zawierał krok instalacji, w wyniku którego powstał
vendor
katalog (odpowiednik PHPnode_modules
). NastępnieCOPY
ten katalog przechodzę do końcowego obrazu aplikacji. Dlatego nie mogę umieścićvendor
w moim.dockerignore
. Moim rozwiązaniem było po prostu usunięcie katalogu przed wykonaniemcomposer install
(odpowiednik PHPnpm install
).To rozwiązanie działa i nie powoduje rozdęcia końcowego obrazu, ale nie jest idealne, ponieważ
vendor
katalog na hoście jest kopiowany do kontekstu Docker podczas procesu kompilacji, co wydłuża czas.źródło
composer.lock
wcześniejcomposer install
. Bez pliku blokady inny zestaw zależności (folder dostawcy) może zostać zainstalowany podczas następnej kompilacji.Dodanie .dockerignore działa dla mnie. Dodatkowa uwaga Ci, którzy wypróbowują to rozwiązanie w systemie Windows , Windows nie pozwolą ci utworzyć pliku .dockerignore (ponieważ domyślnie nie pozwala na tworzenie pliku od.)
Aby utworzyć taki plik, zaczynając od. w systemie Windows , jak również zakończenie kropka, jak:
.dockerignore.
i naciśnij Enter (o ile masz włączoną opcje widoku rozszerzenie z opcji folderów)źródło
Z wyłączeniem modułów node_modu z bieżącego katalogu
Z wyjątkiem modułów node_modules w jakichkolwiek bezpośrednich podkatalogach
Oto oficjalne dokumenty
źródło