Alterar comando de diretório no Docker?

214

Na janela de encaixe, quero fazer o seguinte:

git clone XYZ
cd XYZ
make XYZ

No entanto, como não há comando cd, eu tenho que passar no caminho completo toda vez (make XYZ / fullpath). Alguma boa solução para isso?

RParadox
fonte
6
Comando WORKDIR é conhecida como uma possível solução alternativa bem
trcarden
1
Não uma solução, é a solução recomendada docs.docker.com/engine/userguide/eng-image/...
John John Pichler

Respostas:

151

Você pode executar um script ou um parâmetro mais complexo para o RUN. Aqui está um exemplo de um Dockerfile que baixei para examinar anteriormente:

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

Por causa do uso de '&&', ele só chegará ao comando 'pip install' final se todos os comandos anteriores tiverem sido bem-sucedidos.

De fato, como todo RUN cria uma nova confirmação e (atualmente) uma camada AUFS, se você tiver muitos comandos no Dockerfile, você usará os limites, portanto, mesclar os RUNs (quando o arquivo estiver estável) pode ser muito coisa útil a fazer.

Alister Bulman
fonte
98
Caso você esteja se perguntando, o efeito do cdúnico dura o RUNcomando atual . O próximo RUNcomeçará a partir do atual WORKDIR.
Ritchie
530

Para mudar para outro diretório, use WORKDIR . Todos os comandos RUN, CMD e ENTRYPOINT após o WORKDIR serão executados a partir desse diretório.

RUN git clone XYZ 
WORKDIR "/XYZ"
RUN make
Javier Castellanos
fonte
40
Usando WORKDIR também é citado como uma melhor prática dockerfile
Martin Woolstenhulme
14
Creio que esta é uma resposta mais adequada à pergunta
Juan Leni
1
Observe que isso cria múltiplas camadas (eu acho?)
Sebi
Essa deve ser a resposta aceita. Testado e pode confirmar que funciona
user1258361
43
RUN git clone http://username:password@url/example.git
WORKDIR /folder
RUN make
alfonsoolavarria
fonte