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?
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 formatdocker
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
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: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 :Ou, une combinaison de ce qui précède