En mi Dockerfile tengo
FROM microsoft/dotnet:2.1-sdk COPY devops/scripts/setup.sh . RUN ls RUN chmod +x ./setup.sh RUN ./setup.sh WORKDIR /appPaso 3 que estoy usando solo para mostrar que el archivo está realmente presente.
Cuando se usa en docker-compose, esto funciona perfectamente en Linux , pero cuando se ejecuta docker-compose up en Windows , da como resultado
> docker-compose up Building create_template Step 1/6 : FROM microsoft/dotnet:2.1-sdk ---> 511c1f563ce6 Step 2/6 : COPY devops/scripts/setup.sh . ---> 3d3bb4ab9bc4 Step 3/6 : RUN ls ---> Running in 43ad6e244ed8 bin boot dev etc home lib lib64 media mnt opt proc root run sbin setup.sh <--- srv sys tmp usr var Removing intermediate container 43ad6e244ed8 ---> aa32210d6a87 Step 4/6 : RUN chmod +x ./setup.sh ---> Running in 2d6858495355 Removing intermediate container 2d6858495355 ---> 5e0388623851 Step 5/6 : RUN ./setup.sh ---> Running in abb3a52fe6ec /bin/sh: 1: ./setup.sh: not found ERROR: Service 'create_template' failed to build: The command '/bin/sh -c ./setup.sh' returned a non-zero code: 127¿Hay alguna manera de usar los mismos archivos y comandos de dockerimage en ambos sistemas o tengo que tener dockerimage y docker-compose alternativos para cada uno? Gracias
Probé tu ejemplo en Windows y reproduje tu problema.
La causa principal es cuando se actualiza el archivo setup.sh en Windows, tiene DOS format . Debe usar git-bash u otro similar para transferir el formato de archivo en el host al unix format por adelantado antes de componer o compilar, algo como:
dos2unix setup.sh Otra forma es hacerlo en Dockerfile , y esto también es compatible cuando usa el host de Linux, algo como lo siguiente:
RUN apt-get update && apt-get install -y dos2unix && dos2unix setup.sh RUN ./setup.sh