Estou criando um script de compilação do Dockerfile e gostaria de usar comandos bash. RUN usa / bin / sh por padrão. Existe alguma maneira de dizer ao RUN para usar / bin / bash em vez disso?
Não, está codificado para "/ bin / sh -c"
É claro que alguém poderia vincular / bin / bash a / bin / sh em uma etapa de construção anterior.
Acabei alterando meu script Dockerfile para copiar um arquivo e usá-lo em vez de usar o redirecionamento que estava usando no bash.
@dwatrous você tentou RUN ["echo", "hello"]
não será embrulhado por /bin/sh
IIRC. Portanto, se você realmente deseja o bash, pode invocá-lo: RUN ["/bin/bash", "-c", "echo hello all in one string"]
.
Deixe-nos saber se isso resolve o seu problema.
O bash pode ser usado manualmente usando-o nas instruções RUN
.
Não há intenção ou plano de tornar possível alterá-lo para bash.
Vou marcar isso como um problema de documento porque podemos querer documentar isso. É a terceira ou quarta vez que essa pergunta surge.
Isso pode ser fechado agora devido a: https://github.com/docker/docker/pull/7489
então qual é a história deste aqui?
@ORESoftware Veja a discussão acima e https://github.com/moby/moby/pull/22489 , que adicionou a instrução SHELL
Dockerfile (Docker 1.12 e superior)
Se você quiser usar um shell diferente para um único RUN
, use a notação do formulário Exec (JSON) - como está sendo discutido acima:
RUN ["/bin/bash", "-c", "echo I am now using bash!"]
Se você quiser alterar o shell padrão em sua imagem (e durante a compilação), use a instrução SHELL
Dockerfile que foi implementada em https://github.com/moby/moby/pull/22489 :
SHELL ["/bin/bash", "-c"]
RUN echo I am now using bash!
Ou uma combinação das opções acima
FROM ubuntu
RUN echo I am using the default (/bin/sh)
RUN ["/bin/bash", "-c", "echo I am using bash"]
SHELL ["/bin/bash", "-c"]
RUN echo I am using bash, which is now the default
RUN ["/bin/sh", "-c", "echo I am using /bin/sh"]
RUN ["echo", "I don't use a shell at all"]
Eu sei que estou atrasado para a festa e sim esta não é a melhor solução, mas funcionou para o que eu precisava
No meu arquivo docker, depois de baixar e extrair o SDK, eu executo esses dois comandos
RUN cp / bin / bash / bin / sh
RUN echo "source ~ / google-cloud-sdk / path.bash.inc" >> ~ / .bashrc
Fonte RUN ~ / .bashrc
Depois disso, o comando gcloud está disponível durante a compilação e no tempo de execução
Para aqueles interessados em reprodutibilidade OCI estrita, a chamada Dockerfile SHELL
não parece estar na especificação OCIv1, por podman 1.4:
ETAPA 2: SHELL ["/ bin / bash", "-c"]
ERRO [0000] SHELL não é compatível com o formato de imagem OCI, [/ bin / bash -c] será ignorado. Deve usar o formatodocker
Atualização: parece que thaJeztah está correto, alguma discussão sobre o suporte a esse recurso em buildah: https://github.com/containers/buildah/issues/507
Update2: BUILDAH_FORMAT=docker
para o resgate
@qhaas não acha que isso tem a ver com as especificações OCI, apenas a implementação de buildah
Comentários muito úteis
@ORESoftware Veja a discussão acima e https://github.com/moby/moby/pull/22489 , que adicionou a instrução
SHELL
Dockerfile (Docker 1.12 e superior)Se você quiser usar um shell diferente para um único
RUN
, use a notação do formulário Exec (JSON) - como está sendo discutido acima:Se você quiser alterar o shell padrão em sua imagem (e durante a compilação), use a instrução
SHELL
Dockerfile que foi implementada em https://github.com/moby/moby/pull/22489 :Ou uma combinação das opções acima