No puedo ejecutar ningún binario en mi contenedor docker.
archivo acoplable:
FROM ubuntu:eoan AS compiler-build RUN apt-get update && \ dpkg --add-architecture i386 && \ apt-get install -y gcc \ gcc-multilib \ make \ cmake \ git \ python3.8 \ bash WORKDIR /home ADD . /home/pawn RUN mkdir build WORKDIR /home/build ENTRYPOINT ["/bin/bash"] CMD ["/bin/bash"] Ni siquiera puedo usar file incorporado:
[root@LAPTOP-EJ5BH6DJ compiler]:~/dev/private/SAMP/compiler (v13.11.0) (master) dc run compiler file bash /usr/bin/file: /usr/bin/file: cannot execute binary fileParece que Entrypoint no puede apuntar a /bin/bash . Eliminar ENTRYPOINT ["/bin/bash"] es suficiente para que funcione.
De este hilo del foro :
Este error ocurre cuando usa un shell en su punto de entrada sin el argumento "-c"
Entonces, si cambia su Dockerfile para terminar con
ENTRYPOINT [ "/bin/bash", "-l", "-c" ]entonces puedes ejecutar archivos binarios.
Tenga en cuenta el propósito de las opciones para /bin/bash , desde la página de manual:
-l : Hace que bash actúe como si hubiera sido invocado como un shell de inicio de sesión
-c : si la opción -c está presente, los comandos se leen desde el primer argumento que no es una opción command_string . Si hay argumentos después de command_string , el primer argumento se asigna a $0 y los argumentos restantes se asignan a los parámetros posicionales. La asignación a $0 establece el nombre del shell, que se utiliza en los mensajes de advertencia y error.
Además, vale la pena leer este artículo sobre cómo usar ENTRYPOINT y CMD juntos, y cuáles son sus diferencias.
EDITAR: Aquí hay otro artículo que entra en un ejemplo trivial (pero más claro que el primer artículo) usando el shell de echo incorporado.
EDITAR: Aquí hay una adaptación del ejemplo trivial del segundo artículo que vinculé:
FROM ubuntu ENTRYPOINT [ "/bin/bash", "-l", "-c" ] CMD [ "ls" ] $ docker build -t test . $ docker run --rm test bin boot ... var $ docker run --rm test "ls etc" adduser.conf alternatives apt ... update-motd.d xattr.conf Tenga en cuenta el " alrededor de ls /etc ". Sin las comillas, el argumento /etc no parece pasarse al comando ls como cabría esperar.
Golpeé el mismo error. A diferencia de las otras respuestas, mi error estaba relacionado con los parámetros de docker run :
# failed docker run -it $(pwd | xargs basename):latest bash # worked docker run -it $(pwd | xargs basename):latest No necesitaba agregar bash porque ya tenía esto en mi Dockerfile:
ENTRYPOINT ["/bin/bash"]