Liman işçisiyle ancak hariç tutulan KOPYALA


Yanıtlar:


378

.dockerignoreDocker derleme bağlam dizininizde dosya oluşturun (bu durumda, büyük olasılıkla düğüm_modüllerinin üst öğesi olan bir dizin) içinde bir satır vardır:

**/node_modules

Her ne kadar muhtemelen sadece:

node_modules

Dockerignore hakkında bilgi: https://docs.docker.com/engine/reference/builder/#dockerignore-file


5
teşekkürler, yani "KOPYA." Komutun değişmesine gerek yok sanırım
Alexander Mills

Gerçekten değil:, /config/nginx/ /config/logstash/bunu konteyner ls config/ gunicorn logs logstash nginx
bashında buluyorum

3
@SalahAdDin yazmamanızın nedeniyle, ls /config/bu yolları .dockerignore'unuza lider olmadan eklemeyi denediniz /mi?
Pablo

8
Sadece node_modulesalt dizinlerde çalışmaz.
rustyx

5
KOPYALANMAK istiyorsanız bu sorunu gerçekten çözmez, ancak bu katmanda değil ...
Wes

33

Bir .dockerignore dosyası kullanamayanlar için (örneğin, dosyaya bir KOPYA'da ihtiyacınız varsa, ancak başka bir dosyaya ihtiyacınız yoksa):

Evet, ancak birden fazla KOPYA talimatına ihtiyacınız var. Özellikle, dosya adındaki hariç tutmak istediğiniz her harf için bir KOPYALAMA gerekir.

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'

Tam dosya adına veya yalnızca makul bir şekilde emin olduğunuz ön eke sahip olana kadar devam etmek başka dosyaya sahip olmayacaktır.


1
Bu, COPY failed: no source files were specified'hayır' ile başlayan hiçbir dosya olmadığında ancak 'nod' ile başlayan bir dosya elde edeceğiniz için işe yaramaz .
mheck

1
Alternatif olarak, bu kadar örneğin benim nginx kurulumunda (Farklı kopyalama hedefler için) iki farklı alt dizinleri, kullanabilirsiniz, ben olurdu src/gidecek /var/wwwve /conf/nginx.confgidin /etc/nginx/conf.d/default.conf. Ayrıca, her şeyi kopyalayabilir ve RUN rm -r confdaha sonra (kaynak ağacı olduğu gibi saklayabilirsiniz). Birinin başka bir önerisi olup olmadığını duymak isterim.
Yuval

1
Bu şekilde yaparsam belirli dosya türleri veya dosya sonları için bir çözüm ne olurdu?
Lea Reimann

Bu yaklaşımın tek dezavantajı, klasör yapınızın düzleştirilmesidir
İslam S.

Kopyalanacak yalnızca birkaç dizininiz varsa (yalnızca '/ app' veya '/ src' deyin). Daha basit bir yol, dizinleri tek tek kopyalamak (yapılarını korumak için) ve daha sonra COPY [^node_modules]*tüm üst düzey dosyaları kopyalamak için sadece bir taneye ihtiyacınız olacaktır.
smdufb

9

Benim durumumda, Docker dosyam vendordizini (PHP eşdeğeri node_modules) üreten bir yükleme adımı içeriyordu . Daha sonra COPYbu dizini son uygulama görüntüsüne aktarıyorum. Bu nedenle, koymak olamazdı vendorskinTenimde .dockerignore. Benim çözüm sadece composer install(PHP eşdeğeri npm install) gerçekleştirmeden önce dizini silmek oldu .

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 .

Bu çözüm çalışır ve son görüntüyü şişirmez, ancak ideal değildir, çünkü vendorana bilgisayardaki dizin, zaman ekleyen oluşturma işlemi sırasında Docker içeriğine kopyalanır.


3
Daha composer.lockönce neden kaldırmanız gerektiğine dikkat edin composer install. Kilit dosyası olmadan, bir sonraki sefer oluşturduğunuzda farklı bir bağımlılıklar kümesi (satıcı klasörü) yüklenebilir.
Lacek

1
@Lacek: Haklısın. Bunu gönderdiğimden beri daha iyi öğrendim.
Cameron Hudson

1
@CameronHudson, insanlar bu kötü uygulamayı kopyalamadan / yapıştırmadan önce orijinal yanıtınızı güncelleyebilir.
Robin van Baalen

2

.Dockerignore eklemek benim için çalışıyor. Bir ek nokta Windows'ta bu çözümü deneyenler , windows .dockerignore dosyası oluşturmanıza izin vermeyecektir (varsayılan olarak başlangıçtan itibaren dosya oluşturmaya izin vermez.)

İle başlayan böyle bir dosya oluşturmak için. Windows üzerinde , : Bir de nokta biten benzeri yer alır .dockerignore.ve isabet girmek (Klasör seçeneklerinden görünüm uzatma seçenekleri sağladı şartıyla)


6
Pencerelerde nokta ile başlayan ve aynı zamanda nokta ile biten bir dosya oluşturabilirsiniz.
Jim Pedid

0

Node_modules öğesini geçerli dizinden hariç tutma

node_modules

Herhangi bir alt alt dizinde node_modules hariç

*/node_modules

İşte resmi dokümanlar

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.