Dockerignore: negeer alles behalve een bestand en het Dockerbestand

Dus de belangrijkste bedoeling was om een ​​vetpot-applicatie te dockeriseren en in Elasticbeanstalk te plaatsen. Het probleem zit hem in de context. Het is een beetje dom om zoveel context aan docker toe te voegen als alles wat ik nodig heb eigenlijk een enkel jar-bestand is.

Ik heb wat gespeeld met het .dockerignore-bestand, maar ik ben de weg kwijt. Ik heb geprobeerd de gitignore-ontkenning te gebruiken, maar het werkt niet.

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

Er is ook zoiets met regex, maar het lijkt erop dat gecompliceerde regex niet wordt ondersteund.

^((?!Dockerfile).)*$

Ik heb ook geprobeerd te zoeken in stackoverflow, en deze twee zijn alles wat ik heb gevonden:

Deze vraag lijkt misschien op de tweede, maar ik denk dat het een klein verschil is, aangezien ik hier slechts een enkel bestand in de context wil opnemen.

Alle hulp wordt op prijs gesteld.


Antwoord 1, autoriteit 100%

Als u alles moet negeren, behalve enkele mappen of bestanden en ook enkele onnodige bestanden in die toegestane mappen negeert, kunt u het volgende .dockerignore-bestand gebruiken:

# 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

Antwoord 2, autoriteit 18%

Van de dockerfile-referentie:

Beyond Go’s filepath.Match-regels, Docker ondersteunt ook een speciale jokertekenreeks ** die overeenkomt met een willekeurig aantal mappen (inclusief nul). **/*.go sluit bijvoorbeeld alle bestanden uit die eindigen op .go die in alle mappen staan, inclusief de hoofdmap van de build-context.

Dus een regel die simpelweg ** bevat, negeert alles in dezelfde map als het Dockerbestand.

Zoals verwacht kan de uitroep dan worden gebruikt om te verwijzen naar bestanden die u naar de docker-daemon wilt sturen.


Antwoord 3, autoriteit 5%

Dit klinkt misschien vreemd, maar als alles wat je nodig hebt een enkel jar-bestand is, kun je een “docker”-map in je bouwsysteem maken die je Docker-bestand bevat. Wanneer u uw builds uitvoert, laat u de buildscripts het enkele jar-bestand naar “docker” kopiëren en vervolgens de docker-image-build uitvoeren (vanuit de “docker”-map) en naar uw docker-register pushen als u klaar bent.

Other episodes