Moby: Comment faire en sorte que Builder RUN utilise / bin / bash au lieu de / bin / sh

Créé le 28 juil. 2014  ·  11Commentaires  ·  Source: moby/moby

Je crée un script de construction Dockerfile et j'aimerais utiliser des commandes bash. RUN utilise / bin / sh par défaut. Existe-t-il un moyen de dire à RUN d'utiliser / bin / bash à la place?

arebuilder kinquestion

Commentaire le plus utile

@ORESoftware Voir la discussion ci-dessus et https://github.com/moby/moby/pull/22489 , qui a ajouté l'instruction SHELL Dockerfile (Docker 1.12 et plus)

  • Si vous souhaitez utiliser un shell différent pour un seul RUN , utilisez la notation du formulaire Exec (JSON) - comme indiqué ci-dessus:

    RUN ["/bin/bash", "-c", "echo I am now using bash!"]
    
  • Si vous souhaitez modifier le shell par défaut dans votre image (et pendant la construction), utilisez l'instruction SHELL Dockerfile qui a été implémentée dans https://github.com/moby/moby/pull/22489 :

    SHELL ["/bin/bash", "-c"]
    RUN echo I am now using bash!
    
  • Ou, une combinaison de ce qui précède

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

Tous les 11 commentaires

Non, ce code en dur est "/ bin / sh -c"
On pourrait bien sûr lier / bin / bash à / bin / sh dans une étape de construction précédente.

J'ai fini par changer mon script Dockerfile pour copier un fichier et l'utiliser plutôt que d'utiliser la redirection que j'avais utilisée dans bash.

@dwatrous avez-vous essayé RUN ["echo", "hello"] ne sera pas encapsulé par /bin/sh IIRC. Donc, si vous voulez absolument bash, vous pouvez l'invoquer: RUN ["/bin/bash", "-c", "echo hello all in one string"] .
Faites-nous savoir si cela résout votre problème.

bash peut être utilisé manuellement en l'utilisant dans les instructions RUN .

Il n'y a aucune intention ni aucun plan pour permettre de le changer en bash.

Je marquerai cela comme un problème de documentation car nous pourrions vouloir le documenter. C'est la troisième ou quatrième fois que cette question surgit.

Cela peut être fermé maintenant en raison de: https://github.com/docker/docker/pull/7489

alors quelle est l'histoire de celui-ci?

@ORESoftware Voir la discussion ci-dessus et https://github.com/moby/moby/pull/22489 , qui a ajouté l'instruction SHELL Dockerfile (Docker 1.12 et plus)

  • Si vous souhaitez utiliser un shell différent pour un seul RUN , utilisez la notation du formulaire Exec (JSON) - comme indiqué ci-dessus:

    RUN ["/bin/bash", "-c", "echo I am now using bash!"]
    
  • Si vous souhaitez modifier le shell par défaut dans votre image (et pendant la construction), utilisez l'instruction SHELL Dockerfile qui a été implémentée dans https://github.com/moby/moby/pull/22489 :

    SHELL ["/bin/bash", "-c"]
    RUN echo I am now using bash!
    
  • Ou, une combinaison de ce qui précède

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

Je sais que je suis en retard à la fête et oui ce n'est pas la meilleure solution, mais cela a fonctionné pour ce dont j'avais besoin

Dans mon fichier docker après avoir téléchargé et extrait le SDK, j'exécute ces deux commandes

RUN cp / bin / bash / bin / sh
RUN echo "source ~ / google-cloud-sdk / path.bash.inc" >> ~ / .bashrc
RUN source ~ / .bashrc

Après cela, la commande gcloud est disponible pendant la construction et au moment de l'exécution

Pour ceux qui s'intéressent à la reproductibilité OCI stricte, l'appel Dockerfile SHELL ne semble pas être dans la spécification OCIv1, par podman 1.4:

ÉTAPE 2: SHELL ["/ bin / bash", "-c"]
ERRO [0000] SHELL n'est pas pris en charge pour le format d'image OCI, [/ bin / bash -c] sera ignoré. Doit utiliser le format docker

Mise à jour: On dirait que thaJeztah est correct, quelques discussions concernant la prise en charge de cette fonctionnalité à buildah: https://github.com/containers/buildah/issues/507

Update2: BUILDAH_FORMAT=docker à la rescousse

@qhaas ne pense pas que cela ait à voir avec les spécifications OCI, juste l'implémentation buildah

Cette page vous a été utile?
0 / 5 - 0 notes