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?
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 formatodocker
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
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: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 :O una combinación de lo anterior