Verzeichnisbefehl in Docker ändern?

214

Im Docker möchte ich Folgendes tun:

git clone XYZ
cd XYZ
make XYZ

Da es jedoch keinen CD-Befehl gibt, muss ich jedes Mal den vollständigen Pfad übergeben (make XYZ / fullpath). Irgendwelche guten Lösungen dafür?

RParadox
quelle
6
Der Befehl WORKDIR wird ebenfalls als mögliche
Problemumgehung angegeben
1
Keine Problemumgehung
John John Pichler

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.

Alister Bulman
quelle
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
Javier Castellanos
quelle
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
43
RUN git clone http://username:password@url/example.git
WORKDIR /folder
RUN make
Alfonsoolavarria
quelle