docker 图像中的 sh 在 Windows 10 上看不到可执行文件
sh in docker image does not see executable on Windows 10
我有一个 docker 映像 https://github.com/carnellj/spmia-chapter1,它没有找到它的 CMD ./run.sh 可执行文件,尽管它在文件系统中。
我可以在容器中 运行 /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 找不到 ./run.sh 尽管它在文件系统中,正如 ls run.sh 所证明的那样。此外, 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 可执行时,我可以执行 ./我的 run.sh 和 spring 服务启动。
这是怎么回事?为什么 sh 看不到文件系统中的可执行文件?来自 PATH 的可执行文件或我手动添加的可执行文件 运行 没问题。
我 运行宁 Docker Windows 10.
好的原因是,如果您使用自动 lf->crlf 转换签出,run.sh 是在 docker 图像中用 Windows 行结尾创建的。一种可能的解决方案是告诉 git 不要转换行结尾。
我有一个 docker 映像 https://github.com/carnellj/spmia-chapter1,它没有找到它的 CMD ./run.sh 可执行文件,尽管它在文件系统中。
我可以在容器中 运行 /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 找不到 ./run.sh 尽管它在文件系统中,正如 ls run.sh 所证明的那样。此外, 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 可执行时,我可以执行 ./我的 run.sh 和 spring 服务启动。
这是怎么回事?为什么 sh 看不到文件系统中的可执行文件?来自 PATH 的可执行文件或我手动添加的可执行文件 运行 没问题。
我 运行宁 Docker Windows 10.
好的原因是,如果您使用自动 lf->crlf 转换签出,run.sh 是在 docker 图像中用 Windows 行结尾创建的。一种可能的解决方案是告诉 git 不要转换行结尾。