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?



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.


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

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.