Cuando ejecuto mi imagen de Docker en Windows 10. Recibo este error:
standard_init_linux.go:190: exec user process caused "no such file or directory"
mi archivo de Docker es:
FROM openjdk:8
EXPOSE 8080
VOLUME /tmp
ADD appagent.tar.gz /opt/app-agent
ADD services.jar app.jar
ADD run.sh /run.sh
# Install compiler and perl stuff
RUN apt-get update
RUN apt-get install -y build-essential
RUN apt-get install -y gcc-multilib
RUN apt-get install -y perl
# Install Percona Toolkit
RUN apt-get install --yes percona-toolkit
RUN ["chmod", "+x", "/run.sh"]
ENTRYPOINT ["/run.sh"]
y el script comienza con #! / bin / sh
#!/bin/sh
set -e
JAVA_OPTS="-Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/urandom"
if [ "${APPD_APP_NAME}" != "" ]; then
JAVA_AGENT="-javaagent:/opt/app-agent/javaagent.jar
fi
exec java ${JVM_OPTS} ${JAVA_OPTS} ${JAVA_AGENT} -jar /app.jar
Intenté el método 1: Intenté cambiar #! / Bin / sh a #! / Bin / bash pero obtuve el mismo error.
Método2 probado: agregado dos2unix en el archivo docker
RUN apt-get install -y dos2unix
RUN dos2unix /run.sh
docker
dockerfile
docker-for-windows
gamechanger17
fuente
fuente
git config core.autocrlf input => (deleted the files from the repo; wasn't sure if git reset would reset the newlines) => git reset --hard
Copiado de: github.com/LiveOverflow/PwnAdventure3/issues/11cambie el punto de entrada como se muestra a continuación. Funcionó para mi
Como señaló tuomastik en los comentarios , los documentos requieren que el primer parámetro sea el ejecutable:
fuente
"sh"
, el procesamiento normal de shell no ocurre fuente/bin/bash
como intérprete de shell, pero como mi imagen está basada en alpina, no venía con ella. He cambiado en mi escriturabash
porsh
y problema resuelto.Tuve el mismo problema al usar la
alpine
imagen.Mi
.sh
archivo tenía la siguiente primera línea:Alpine no tiene bash. Así que cambiando la línea a
o instalando bash con
resolvió el problema para mí.
fuente
en mi caso tuve que cambiar el final de línea de
CRLF
aLF
para elrun.sh
archivo y el error desapareció.Espero que esto ayude,
Kirsten
fuente
Suponga que enfrenta este problema mientras ejecuta su go binary en un contenedor alpino. Exporta la siguiente variable antes de construir tu contenedor
Entonces
go build
fuente
RUN export CGO_ENABLED=0 && go build
RUN CGO_ENABLED=0 go build
Es un problema de CRLF. Solucioné el problema usando esto:
fuente
"Ningún archivo o directorio" proviene de Linux y he visto las siguientes causas:
La primera causa es en realidad no tener el archivo dentro de su contenedor. Algunas personas intentan ejecutar un comando desde el host sin agregarlo a su imagen. Algunas personas siguen su comando montando un volumen encima del comando que querían ejecutar. Si ejecuta el mismo contenedor, pero con un shell en lugar de su valor normal de punto de entrada / cmd, y ejecuta un
ls /path/to/cmd
, verá si existe.La siguiente causa es ejecutar el comando incorrecto. Esto a menudo aparece con el formato json / exec del comando para ejecutar que no se analiza correctamente. Si ve un comando que intenta ejecutarse
["app",
o algo similar, la cadena json no fue analizada por Docker y Linux está tratando de usar un shell para analizar el comando como una cadena. Esto también puede suceder si ordena mal los argumentos, por ejemplo, intentar ejecutar-it
es una señal de que intentó colocar banderas después del nombre de la imagen cuando deben colocarse antes del nombre de la imagen.Con los scripts de shell, este error aparece si la primera línea con los
#!
puntos a un comando que no existe dentro del contenedor. Para algunos, esto es intentar ejecutarsebash
en una imagen que solo tiene/bin/sh
. Y en su caso, esto puede ser desde los avances de línea de Windows en el script. Cambiar a los avances de línea de Linux / Unix en su editor corregirá eso.Con los binarios, este error aparece si falta una biblioteca vinculada. He visto esto a menudo cuando los comandos de Go están compilados
libc
, pero se ejecutan en alpine conmusl
o en scratch sin ninguna biblioteca. Debe incluir todas las bibliotecas que faltan o compilar estáticamente su comando. Para ver estos enlaces de biblioteca, utiliceldd /your/app
en su archivo binario.fuente
Reemplazo de CRLF con LF usando Notepad ++
Reconstruir y ejecutar la imagen de la ventana acoplable debería resolver su problema.
fuente
No puedo comentar debido a mi representante, pero solo quería agregar: para los usuarios de VSCode , puede cambiar los finales de línea CRLF a LF haciendo clic en CRLF en la barra de estado, luego seleccione LF y guarde el archivo.
Tuve el mismo problema y esto lo resolvió.
fuente
Tenga en cuenta un error similar como:
puede suceder si la arquitectura para la que se creó una imagen no coincide con la de su sistema. Por ejemplo, intentar ejecutar una imagen creada
arm64
en unax86_64
máquina puede generar este error.fuente
Agregue esto a su Dockerfile
fuente
Resolví este problema estableciendo mi configuración en vscode.
Saludos
fuente