Dockerignore: Bir dosya ve Dockerfile dışındaki her şeyi yok sayın


92

Dolayısıyla asıl amaç, bir şişman kavanoz uygulamasını yerleştirmek ve onu Elasticbeanstalk'a koymaktı. Sorun bağlamla ilgilidir. İhtiyacım olan tek şey aslında tek bir jar dosyasıysa, docker'a bu kadar bağlam eklemek biraz aptalca.

.Dockerignore dosyasıyla oynuyordum ama kayboldum. Gitignore olumsuzlamasını kullanmayı denedim, ama işe yaramıyor.

*
!Dockerfile
*/
!target/
target/*
!target/*.jar

Normal ifadede de bir şey var, ancak karmaşık normal ifadelerin desteklenmediği görülüyor.

^((?!Dockerfile).)*$

Ayrıca stackoverflow'da aramayı da denedim ve bulduğum bu ikisi:

Bu soru ikinciye benzer olabilir, ancak bence biraz farklıdır, çünkü burada, içeriğe tek bir dosya eklemek istiyorum.

Herhangi bir yardım takdir edilecektir.


Klasörler için ünlem işareti benim için çalışıyor!
Ivan Aracki

Yanıtlar:


135

Bazı dizinler veya dosyalar dışında her şeyi göz ardı etmeniz ve izin verilen bu dizinlerdeki bazı gereksiz dosyaları da yok saymanız gerekirse, aşağıdaki .dockerignoredosyayı kullanabilirsiniz :

# Ignore everything
**

# Allow files and directories
!/file.txt
!/src/**

# Ignore unnecessary files inside allowed directories
# This should go after the allowed directories
**/*~
**/*.log
**/.DS_Store
**/Thumbs.db

8
Docker belgelerine göre sadece *ilk satıra (yerine **) koymak yeterli olmalıdır . Alıntı: "Hangi dosyaların hariç tutulacağını değil, içeriğe dahil edileceğini belirtmek isteyebilirsiniz. Bunu başarmak için *, ilk kalıp olarak ve ardından bir veya daha fazla !istisna kalıbı olarak belirtin ."
Johnny Thunderman

32

Gönderen dockerfile referans :

Go'nun filepath.Match kurallarının ötesinde Docker, herhangi bir sayıda dizinle (sıfır dahil) eşleşen özel bir joker karakter dizesini ** de destekler. Örneğin, ** / *. Go, derleme bağlamının kökü de dahil olmak üzere tüm dizinlerde bulunan .go ile biten tüm dosyaları hariç tutar.

Dolayısıyla, sadece ** içeren bir satır, Dockerfile ile aynı dizindeki her şeyi yok sayacaktır.

Beklendiği gibi, ünlem işareti docker daemon'a göndermek istediğiniz herhangi bir dosyayı belirtmek için kullanılabilir.


3
**Dosyanın en üstüne gitmesi son derece önemlidir , aksi takdirde istisnalar göz ardı edilecektir. Docker, "son" kural olarak eşleşen son kuralı kullanır, bu nedenle son kuralı varsa **her şeyi eşleştirir.
tedivm

3
Yani , dahil etmek istediğiniz tek dosya buysa , **ilk satıra ve !foosonraki satıra fooekleyin.
Saca

9

Bu garip gelebilir, ancak tek ihtiyacınız olan tek bir jar dosyasıysa, yapı sisteminizde Dockerfile'ınızı içeren bir "docker" klasörü oluşturabilirsiniz. Derlemelerinizi çalıştırdığınızda, derleme betiklerinin tek jar dosyasını "docker" a kopyalamasını ve ardından docker imaj yapısını ("docker" klasörünün içinden) çalıştırmasını ve bittiğinde docker kayıt defterinize göndermesini sağlayın.


2
Merhaba, kulağa tuhaf gelmiyor. Bunun genel bir uygulama olduğunu düşündüm, ancak mümkünse .dockerignore ile bunu yapmanın bir yolunu arıyordum. Ayrıca, mvn xml'yi gerçekten sevmiyorum :)
Rowanto

Dockerfile'ı bir alt dizine koyarak ve .dockerignore kullanarak her iki yaklaşımı birleştirebilirsiniz. Belgelere göre, her halükarda bunu yapmak iyidir
Jonathan Lee

Docker'ın belgeleri : Çoğu durumda, bağlam olarak boş bir dizinle başlamak ve Dockerfile'ınızı bu dizinde tutmak en iyisidir. Yalnızca Dockerfile'ı oluşturmak için gereken dosyaları ekleyin. Uyarı: Yapının sabit sürücünüzün tüm içeriğini Docker daemon'a aktarmasına neden olduğu için kök dizininizi /, PATH olarak kullanmayın.
Jonathan Lee
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.