Moby: Cómo hacer que Builder RUN use / bin / bash en lugar de / bin / sh

Creado en 28 jul. 2014  ·  11Comentarios  ·  Fuente: moby/moby

Estoy creando un script de compilación de Dockerfile y me gustaría usar los comandos bash. RUN usa / bin / sh por defecto. ¿Hay alguna forma de decirle a RUN que use / bin / bash en su lugar?

arebuilder kinquestion

Comentario más útil

@ORESoftware Consulte la discusión anterior y https://github.com/moby/moby/pull/22489 , que agregó la instrucción SHELL Dockerfile (Docker 1.12 y superior)

  • Si desea usar un shell diferente para un solo RUN , use la notación del formulario Exec (JSON) , como se discutió anteriormente:

    RUN ["/bin/bash", "-c", "echo I am now using bash!"]
    
  • Si desea cambiar el shell predeterminado en su imagen (y durante la compilación), use la instrucción SHELL Dockerfile que se implementó en https://github.com/moby/moby/pull/22489 :

    SHELL ["/bin/bash", "-c"]
    RUN echo I am now using bash!
    
  • O una combinación de lo anterior

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

Todos 11 comentarios

No, está codificado en "/ bin / sh -c"
Por supuesto, se podría vincular / bin / bash a / bin / sh en un paso de compilación anterior.

Terminé cambiando mi script Dockerfile para copiar un archivo y usarlo en lugar de usar la redirección que había estado usando en bash.

@dwatrous ¿lo intentaste? RUN ["echo", "hello"] no estará envuelto por /bin/sh IIRC. Entonces, si absolutamente quieres bash, puedes invocarlo: RUN ["/bin/bash", "-c", "echo hello all in one string"] .
Háganos saber si resuelve su problema.

bash se puede usar manualmente usándolo en RUN instrucciones.

No hay ninguna intención o plan para hacer posible cambiarlo a bash.

Lo marcaré como un problema de documentación porque es posible que queramos documentarlo. Es la tercera o cuarta vez que surge esta pregunta.

Esto se puede cerrar ahora debido a: https://github.com/docker/docker/pull/7489

Entonces, ¿cuál es la historia de este?

@ORESoftware Consulte la discusión anterior y https://github.com/moby/moby/pull/22489 , que agregó la instrucción SHELL Dockerfile (Docker 1.12 y superior)

  • Si desea usar un shell diferente para un solo RUN , use la notación del formulario Exec (JSON) , como se discutió anteriormente:

    RUN ["/bin/bash", "-c", "echo I am now using bash!"]
    
  • Si desea cambiar el shell predeterminado en su imagen (y durante la compilación), use la instrucción SHELL Dockerfile que se implementó en https://github.com/moby/moby/pull/22489 :

    SHELL ["/bin/bash", "-c"]
    RUN echo I am now using bash!
    
  • O una combinación de lo anterior

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

Sé que llego tarde a la fiesta y sí, esta no es la mejor solución, pero funcionó para lo que necesitaba.

En mi archivo de Docker, después de descargar y extraer el SDK, ejecuto estos dos comandos

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

Después de eso, el comando de gcloud está disponible durante la compilación y en tiempo de ejecución

Para aquellos interesados ​​en la reproducibilidad estricta de OCI, la llamada de Dockerfile SHELL no parece estar en la especificación OCIv1, según podman 1.4:

PASO 2: SHELL ["/ bin / bash", "-c"]
ERRO [0000] SHELL no es compatible con el formato de imagen OCI, se ignorará [/ bin / bash -c]. Debe usar el formato docker

Actualización: Parece que thaJeztah está en lo correcto, algunas discusiones sobre el soporte de esta función en buildah: https://github.com/containers/buildah/issues/507

Update2: BUILDAH_FORMAT=docker al rescate

@qhaas no cree que tenga que ver con las especificaciones de OCI, solo la implementación de buildah

¿Fue útil esta página
0 / 5 - 0 calificaciones