W dokowanym chcę to zrobić:Docker: zmiana polecenia katalog
git clone XYZ
cd XYZ
make XYZ
Jednak ponieważ nie ma polecenia cd, muszę przejść w pełni za każdym torze (marka XYZ/fullpath). Jakieś dobre rozwiązania?
W dokowanym chcę to zrobić:Docker: zmiana polecenia katalog
git clone XYZ
cd XYZ
make XYZ
Jednak ponieważ nie ma polecenia cd, muszę przejść w pełni za każdym torze (marka XYZ/fullpath). Jakieś dobre rozwiązania?
Możesz uruchomić skrypt lub bardziej złożony parametr RUN. Oto przykład z Dockerfile Pobrałem patrzeć poprzednio:
RUN cd /opt && unzip treeio.zip && mv treeio-master treeio && \
rm -f treeio.zip && cd treeio && pip install -r requirements.pip
Ze względu na stosowanie „& &”, będzie tylko dostać się do finału „pip install” komenda jeśli wszystkich poprzednich poleceń udało się.
W rzeczywistości, ponieważ każdy RUN tworzy nowy commit & (obecnie) warstwę AUFS, jeśli masz zbyt wiele poleceń w pliku Dockerfile, użyjesz limitów, więc scalisz RUNy (gdy plik jest stabilny) może być bardzo przydatna rzecz do zrobienia.
Jeśli zastanawiasz się, efekt 'cd' trwa tylko dla bieżącej komendy' RUN'. Następny "RUN" rozpocznie się od bieżącego 'WORKDIR'. – Ritchie
Aby przejść do innego katalogu, użyj WORKDIR. Wszystkie polecenia RUN, CMD i ENTRYPOINT po WORKDIR będą wykonane z tego katalogu.
RUN git clone XYZ
WORKDIR "/XYZ"
RUN make
Używanie WORKDIR jest również cytowane jako [najlepsza praktyka dokowania] (https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#workdir) –
Uważam, że jest to bardziej odpowiednia odpowiedź na pytanie – purpletentacle
RUN git clone http://username:[email protected]/example.git
WORKDIR /folder
RUN make
pokrewne: http://stackoverflow.com/questions/17891669/docker-command-fails-during-build-but-succeeds-while-executed-within-running-co – trcarden
jest komenda WORKDIR jest również możliwe obejście problemu – trcarden
To nie jest obejście problemu, zalecane rozwiązanie https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#workdir –