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?



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.


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

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.