Verzeichnisbefehl in Docker ändern?


Antworten:


151

Sie können ein Skript oder einen komplexeren Parameter für den RUN ausführen. Hier ist ein Beispiel aus einer Docker-Datei, die ich heruntergeladen habe, um sie mir zuvor anzusehen:

RUN cd /opt && unzip treeio.zip && mv treeio-master treeio && \
    rm -f treeio.zip && cd treeio && pip install -r requirements.pip

Aufgrund der Verwendung von '&&' wird der endgültige Befehl 'pip install' nur erreicht, wenn alle vorherigen Befehle erfolgreich waren.

Da jeder RUN ein neues Commit und (derzeit) eine AUFS-Ebene erstellt, verbrauchen Sie die Grenzwerte, wenn Sie zu viele Befehle in der Docker-Datei haben. Daher kann das Zusammenführen der RUNs (wenn die Datei stabil ist) sehr schwierig sein nützliche Sache zu tun.


98
Falls Sie sich fragen, bleibt die Wirkung der cdeinzigen für den aktuellen RUNBefehl bestehen. Der nächste RUNbeginnt mit dem aktuellen WORKDIR.
Ritchie

530

Verwenden Sie WORKDIR, um in ein anderes Verzeichnis zu wechseln . Alle Befehle RUN, CMD und ENTRYPOINT nach WORKDIR werden in diesem Verzeichnis ausgeführt.

RUN git clone XYZ 
WORKDIR "/XYZ"
RUN make

40
Die Verwendung von WORKDIR wird auch als bewährte
Martin Woolstenhulme

14
Ich glaube, dies ist eine angemessenere Antwort auf die Frage
Juan Leni

1
Beachten Sie, dass dies mehrere Ebenen erstellt (glaube ich?)
Sebi

Dies sollte die akzeptierte Antwort sein. Getestet und kann bestätigen, dass es funktioniert
user1258361

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.