用于Windows的Docker在生成映像时退出,代码为127

用于Windows的Docker在生成映像时退出,代码为127,docker,gradle,dockerfile,Docker,Gradle,Dockerfile,当我尝试构建此Docker映像时,出现以下错误: FROM java:8 WORKDIR /app ADD . /app EXPOSE 8080 RUN ./gradlew build CMD ./gradlew bootRun 当我使用gradlew build构建应用程序时,它会运行,当我尝试使用Mac运行Docker映像时,它也会运行,只是不适用于windows 编辑: gradlew必须标记为可执行文件 chmod+x梯度 Mac和Linux共享权限方案,但Windows需要

当我尝试构建此Docker映像时,出现以下错误:

FROM java:8

WORKDIR /app

ADD . /app

EXPOSE 8080

RUN ./gradlew build

CMD ./gradlew bootRun
当我使用gradlew build构建应用程序时,它会运行,当我尝试使用Mac运行Docker映像时,它也会运行,只是不适用于windows

编辑:


gradlew必须标记为可执行文件

chmod+x梯度


Mac和Linux共享权限方案,但Windows需要使用虚拟FS,因此它复制具有默认权限的文件-644,而您需要755。

这不是一个很好的答案,但我发现,当Windows将文件从Windows装载到Docker中时,它会在装载的文件上留下类似Windows的行尾。在Dockerfile中解决此问题的一个简单方法是在容器中安装dos2unix并添加

RUN dos2unix gradlew

在执行构建过程之前。不幸的是,这是一个糟糕的解决方案。希望即将发布的WSL2上的Docker for Windows能够更好地解决这一问题,但目前您只能使用这种简陋的解决方案。

没有这样的文件或目录。。。您需要实际复制gradlew shell脚本。您可以进一步详细说明一下吗?请在windows中显示生成目录的内容。在Gradle命令之前添加RUN ls步骤。。。我的观点是,请添加/应用程序实际上并没有添加名为./gradlew的可执行文件,因为错误提示将其写入postHmm。。。可以无论如何,这并不是运行Java应用程序的正确方式。您通常在容器外部构建一个JAR,然后将其复制到容器中并运行它