Zmienić polecenie katalogu w Dockerze?

214

W oknie dokowanym chcę to zrobić:

git clone XYZ
cd XYZ
make XYZ

Ponieważ jednak nie ma polecenia cd, za każdym razem muszę podawać pełną ścieżkę (make XYZ / fullpath). Jakieś dobre rozwiązania tego?

RParadox
źródło
6
Polecenie WORKDIR zostało również odnotowane jako możliwe obejście
trcarden
1
Nie jest to obejście, jest to zalecane rozwiązanie docs.docker.com/engine/userguide/eng-image/…
John John Pichler

Odpowiedzi:

151

Możesz uruchomić skrypt lub bardziej złożony parametr do RUN. Oto przykład z pliku Docker, który pobrałem, aby obejrzeć wcześniej:

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

Z powodu użycia „&&” dojdzie do ostatecznej komendy „pip install” tylko wtedy, gdy wszystkie poprzednie komendy się powiodły.

W rzeczywistości, ponieważ każda RUN tworzy nowe zatwierdzenie i (obecnie) warstwę AUFS, jeśli masz zbyt wiele poleceń w Dockerfile, wykorzystasz limity, więc scalenie RUN (gdy plik jest stabilny) może być bardzo przydatna rzecz do zrobienia.

Alister Bulman
źródło
98
Jeśli się zastanawiasz, efekt cdjedynego trwa dla bieżącego RUNpolecenia. Następny RUNrozpocznie się od prądu WORKDIR.
Ritchie
531

Aby przejść do innego katalogu, użyj WORKDIR . Wszystkie polecenia RUN, CMD i ENTRYPOINT po WORKDIR zostaną wykonane z tego katalogu.

RUN git clone XYZ 
WORKDIR "/XYZ"
RUN make
Javier Castellanos
źródło
40
Używanie WORKDIR jest również cytowane jako najlepsza praktyka
Martin Woolstenhulme
14
Uważam, że jest to bardziej odpowiednia odpowiedź na pytanie
Juan Leni,
1
Zauważ, że tworzy to wiele warstw (tak myślę?)
Sebi,
To powinna być zaakceptowana odpowiedź. Przetestowano i można potwierdzić, że działa
1258361
43
RUN git clone http://username:password@url/example.git
WORKDIR /folder
RUN make
alfonsoolawarria
źródło