Moby: Как заставить Builder RUN использовать / bin / bash вместо / bin / sh

Созданный на 28 июл. 2014  ·  11Комментарии  ·  Источник: moby/moby

Я создаю сценарий сборки Dockerfile и хочу использовать команды bash. RUN по умолчанию использует / bin / sh. Есть ли способ указать RUN использовать вместо этого / bin / bash?

arebuilder kinquestion

Самый полезный комментарий

@ORESoftware См. Обсуждение выше и https://github.com/moby/moby/pull/22489 , где добавлена ​​инструкция SHELL Dockerfile (Docker 1.12 и выше).

  • Если вы хотите использовать другую оболочку для одного RUN , используйте нотацию Exec form (JSON), как описано выше:

    RUN ["/bin/bash", "-c", "echo I am now using bash!"]
    
  • Если вы хотите изменить оболочку по умолчанию в своем образе (и во время сборки), используйте инструкцию SHELL Dockerfile, которая была реализована в https://github.com/moby/moby/pull/22489 :

    SHELL ["/bin/bash", "-c"]
    RUN echo I am now using bash!
    
  • Или сочетание вышеперечисленного

    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"]
    

Все 11 Комментарий

Нет, это жестко запрограммировано в "/ bin / sh -c"
Конечно, можно было связать / bin / bash с / bin / sh на предыдущем этапе сборки.

Я закончил тем, что изменил свой сценарий Dockerfile, чтобы скопировать файл и использовать его, вместо того, чтобы использовать перенаправление, которое я использовал в bash.

@dwatrous вы пробовали RUN ["echo", "hello"] не будет обернут /bin/sh IIRC. Так что, если вам абсолютно нужен bash, вы можете вызвать его: RUN ["/bin/bash", "-c", "echo hello all in one string"] .
Сообщите нам, если это решит вашу проблему.

bash можно использовать вручную, используя его в инструкциях RUN .

Нет никакого намерения или плана сделать возможным изменение его на bash.

Я отмечу это как проблему с документом, потому что мы могли бы захотеть это задокументировать. Этот вопрос возникает уже в третий или четвертый раз.

Теперь это можно закрыть по следующей причине: https://github.com/docker/docker/pull/7489

так что за история по этому поводу?

@ORESoftware См. Обсуждение выше и https://github.com/moby/moby/pull/22489 , где добавлена ​​инструкция SHELL Dockerfile (Docker 1.12 и выше).

  • Если вы хотите использовать другую оболочку для одного RUN , используйте нотацию Exec form (JSON), как описано выше:

    RUN ["/bin/bash", "-c", "echo I am now using bash!"]
    
  • Если вы хотите изменить оболочку по умолчанию в своем образе (и во время сборки), используйте инструкцию SHELL Dockerfile, которая была реализована в https://github.com/moby/moby/pull/22489 :

    SHELL ["/bin/bash", "-c"]
    RUN echo I am now using bash!
    
  • Или сочетание вышеперечисленного

    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"]
    

Я знаю, что опаздываю на вечеринку, и да, это не лучшее решение, но оно сработало для того, что мне было нужно

В моем файле докеров после загрузки и извлечения SDK я запускаю эти две команды

ЗАПУСК cp / bin / bash / bin / sh
RUN echo "source ~ / google-cloud-sdk / path.bash.inc" >> ~ / .bashrc
Источник RUN ~ / .bashrc

После этого команда gcloud доступна во время сборки и во время выполнения.

Для тех, кто заинтересован в строгой воспроизводимости OCI, вызов Dockerfile SHELL , по-видимому, не входит в спецификацию OCIv1, согласно podman 1.4:

ШАГ 2: ОБОЛОЧКА ["/ bin / bash", "-c"]
ERRO [0000] SHELL не поддерживается для формата изображения OCI, [/ bin / bash -c] будет проигнорировано. Необходимо использовать формат docker

Обновление: похоже, что thaJeztah прав, некоторые обсуждения поддержки этой функции на buildah: https://github.com/containers/buildah/issues/507

Update2: BUILDAH_FORMAT=docker на помощь

@qhaas не думает, что это связано со спецификациями OCI, это просто реализация buildah

Была ли эта страница полезной?
0 / 5 - 0 рейтинги