在docker映像中的sh在Windows 10上看不到可执行文件

我有一个docker图像https://github.com/carnellj/spmia-chapter1它找不到它的CMD ./run.sh可执行文件,尽pipe它在文件系统中。

我能够在容器中运行/ bin / sh,并且我可以使用ls -l:

D:\Dokumente\ws\spring-microservices\spmia-chapter1 (master) λ docker run -i -t johncarnell/tmx-simple-service:chapter1 /bin/sh / # ls -l total 56 drwxr-xr-x 2 root root 4096 Mar 3 11:20 bin drwxr-xr-x 5 root root 360 Apr 22 07:10 dev drwxr-xr-x 1 root root 4096 Apr 22 07:10 etc drwxr-xr-x 2 root root 4096 Mar 3 11:20 home drwxr-xr-x 1 root root 4096 Apr 22 06:01 lib drwxr-xr-x 5 root root 4096 Mar 3 11:20 media drwxr-xr-x 2 root root 4096 Mar 3 11:20 mnt dr-xr-xr-x 123 root root 0 Apr 22 07:10 proc drwx------ 1 root root 4096 Apr 22 07:10 root drwxr-xr-x 2 root root 4096 Mar 3 11:20 run -rwxr-xr-x 1 root root 245 Apr 22 06:50 run.sh drwxr-xr-x 2 root root 4096 Mar 3 11:20 sbin drwxr-xr-x 2 root root 4096 Mar 3 11:20 srv dr-xr-xr-x 13 root root 0 Apr 22 07:10 sys drwxrwxrwt 2 root root 4096 Mar 3 11:20 tmp drwxr-xr-x 1 root root 4096 Mar 7 01:04 usr drwxr-xr-x 1 root root 4096 Mar 7 01:04 var / # ./run.sh /bin/sh: ./run.sh: not found / # ls run.sh run.sh 

/ bin / sh没有find./run.sh,尽pipe它在文件系统中,正如ls run.sh所certificate的那样。 另外,cat显示run.sh的内容:

 / # cat run.sh #!/bin/sh echo "********************************************************" echo "Starting simple-service " echo "********************************************************" java -jar /usr/local/simple-service/simple-service-0.0.1-SNAPSHOT.jar 

当我从sh运行vi并将run.sh的内容复制到一个新文件myrun.sh中并使myrun.sh可执行时,我可以执行./myrun.sh并启动spring服务。

这里发生了什么? 为什么不会在文件系统中看到一个可执行文件? PATH中的可执行文件或手动添加的可执行文件运行良好。

我在Windows 10上运行Docker。

OK,原因是,如果您使用自动lf-> crlf转换签出,则在docker映像中使用Windows行结尾创buildrun.sh。 一个可能的解决scheme是告诉git不要转换行结束符。