Vroeger plaatste ik de directory tests
in .dockerignore
zodat deze niet zou worden opgenomen in de afbeelding, die ik gebruikte om een webservice uit te voeren.
p>
Nu probeer ik Docker te gebruiken om mijn unit-tests uit te voeren, en in dit geval wil ik dat de directory tests
wordt opgenomen.
Ik heb docker build -h
gecontroleerd en geen verwante optie gevonden.
Hoe kan ik dit doen?
Antwoord 1, autoriteit 100%
Docker 19.03 heeft hiervoor een oplossing geleverd.
De Docker-client probeert eerst
<dockerfile-name>.dockerignore
te laden en valt dan terug naar.dockerignore
als het niet kan worden gevonden. Dusdocker build -f Dockerfile.foo .
probeert eerstDockerfile.foo.dockerignore
te laden.
Het instellen van de DOCKER_BUILDKIT=1
omgevingsvariabele is momenteel vereist om deze functie te gebruiken. Deze vlag kan worden gebruikt met docker compose
sinds 1.25.0 -rc3door onder vermelding van COMPOSE_DOCKER_CLI_BUILD=1
.
Zie ook:
- https://github.com/moby/moby/issues/12886# issuecomment-480575928
- https://github.com/moby/moby/issues/12886# issuecomment-518843764
- https://github.com/moby/moby/issues/12886# issuecomment-523706042
Antwoord 2, autoriteit 13%
Op dit moment is er geen manier om dit te doen. Er is een lange discussie gaande over het toevoegen van een --ignore
vlag aan Docker om het negeerbestand te leveren dat moet worden gebruikt – zie hier.
De opties die je op dit moment hebt zijn meestal lelijk:
- Verdeel uw project in submappen die elk hun eigen
Dockerfile
en.dockerignore
hebben, wat in uw geval mogelijk niet werkt. - Maak een script dat de relevante bestanden naar een tijdelijke map kopieert en voer daar de Docker-build uit.
Antwoord 3, autoriteit 2%
Het zou hier een optie kunnen zijn om de opgeschoonde tests als volumemount aan de container toe te voegen. Nadat u de afbeelding hebt gemaakt, koppelt u de broncode met de tests bovenop de opgeschoonde code als u deze uitvoert om te testen.
services:
tests:
image: my-clean-image
volumes:
- '../app:/opt/app' # Add removed tests
Antwoord 4
Ik heb geprobeerd de DOCKER_BUILDKIT
te activeren zoals voorgesteld door @thisismydesign, maar ik kwam andere problemen tegen (buiten het bestek van deze vraag).
Als alternatief maak ik een tussenliggende tar door de vlag -T te gebruiken die een txt-bestand nodig heeft met de bestanden die in mijn tar moeten worden opgenomen, dus het is niet zo anders dan een witte lijst .dockerignore.
Ik exporteer deze tar en pijp het naar de docker build-opdracht, en specificeer mijn docker-bestand, dat overal in mijn bestandshiërarchie kan staan. Uiteindelijk ziet het er zo uit:
tar -czh -T files-to-include.txt | docker build -f path/to/Dockerfile -