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?
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?
Odpowiedzi:
Utwórz plik .dockerignorew katalogu kontekstowym kompilacji dokera (więc w tym przypadku najprawdopodobniej katalog, który jest rodzicem modułów_węzła) z jednym wierszem:
**/node_modules
chociaż prawdopodobnie po prostu chcesz:
node_modules
Informacje o dockerignore: https://docs.docker.com/engine/reference/builder/#dockerignore-file
/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_modulesnie 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ć.
COPY [^n]* # All files that don't start with 'n'
COPY n[^o]* # All files that start with 'n', but not 'no'
COPY no[^d]* # All files that start with 'no', but not 'nod'
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.
COPY failed: no source files were specifiedgdy nie będzie żadnych plików zaczynających się od „nie”, ale nie „skinienie”.
src/przejść do /var/wwwi /conf/nginx.confprzejść do /etc/nginx/conf.d/default.conf. Możesz także skopiować wszystko, a RUN rm -r confpóź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ł vendorkatalog (odpowiednik PHP node_modules). Następnie COPYten katalog przechodzę do końcowego obrazu aplikacji. Dlatego nie mogę umieścić vendorw moim .dockerignore. Moim rozwiązaniem było po prostu usunięcie katalogu przed wykonaniem composer install(odpowiednik PHP npm install).
FROM composer AS composer
WORKDIR /app
COPY . .
RUN rm -rf vendor \
&& composer install
FROM richarvey/nginx-php-fpm
WORKDIR /var/www/html
COPY --from=composer /app .
To rozwiązanie działa i nie powoduje rozdęcia końcowego obrazu, ale nie jest idealne, ponieważ vendorkatalog na hoście jest kopiowany do kontekstu Docker podczas procesu kompilacji, co wydłuża czas.
composer.lockwcześniej composer 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)
Z wyłączeniem modułów node_modu z bieżącego katalogu
node_modules
Z wyjątkiem modułów node_modules w jakichkolwiek bezpośrednich podkatalogach
*/node_modules
.dockerignore?