为什么我的docker-entrypoint.sh不会执行?

我的ENTRYPOINT脚本不执行并引发standard_init_linux.go:175: exec user process caused "no such file or directory" 。 为什么这样?

不起作用

 $ docker build -t gilani/trollo . && docker run gilani/trollo Sending build context to Docker daemon 126 kB Step 1 : FROM vault:latest ---> 1f127f53f8b5 Step 2 : MAINTAINER Amin Shah Gilani <gilani@payload.tech> ---> Using cache ---> 86b885ca1c81 Step 3 : COPY vaultConfig.json /vault/config ---> Using cache ---> 1a2be2fa3acd Step 4 : COPY ./docker-entrypoint.sh / ---> Using cache ---> 0eb7c1c992f1 Step 5 : RUN chmod +x /docker-entrypoint.sh ---> Running in 251395c4790f ---> 46aa0fbc9637 Removing intermediate container 251395c4790f Step 6 : ENTRYPOINT /docker-entrypoint.sh ---> Running in 7434f052178f ---> eca040859bfe Removing intermediate container 7434f052178f Successfully built eca040859bfe standard_init_linux.go:175: exec user process caused "no such file or directory" 

Dockerfile:

 FROM vault:latest MAINTAINER Amin Shah Gilani <gilani@payload.tech> COPY vaultConfig.json /vault/config COPY ./docker-entrypoint.sh / RUN chmod +x /docker-entrypoint.sh ENTRYPOINT ["/docker-entrypoint.sh"] 

docker-entrypoint.sh:

 #!/bin/bash echo 'Hello World!' 

作品

 $ docker build -t gilani/trollo . && docker run gilani/trollo Sending build context to Docker daemon 126 kB Step 1 : FROM vault:latest ---> 1f127f53f8b5 Step 2 : MAINTAINER Amin Shah Gilani <gilani@payload.tech> ---> Using cache ---> 86b885ca1c81 Step 3 : COPY vaultConfig.json /vault/config ---> Using cache ---> 1a2be2fa3acd Step 4 : ENTRYPOINT echo 'hello world' ---> Using cache ---> ef5792a1f252 Successfully built ef5792a1f252 'hello world' 

Dockerfile:

 FROM vault:latest MAINTAINER Amin Shah Gilani <gilani@payload.tech> COPY vaultConfig.json /vault/config ENTRYPOINT ["echo", "'hello world'"] 

vault:latest图像不包含/bin/bash ,你试图用你的密码#!/bin/bash调用。 您应该将其更改为#!/bin/sh或从脚本中完全删除shebang。

我正在把头发撕成一个与此非常相似的问题。 在我的情况/ bin / bash DID存在。 但实际上问题是窗口线结束。

在我的情况下,git仓库有一个带有Unix行尾的入口点脚本(\ n)。 但是,当仓库在Windows机器上签出时,git决定尝试并巧妙地将文件中的行结尾replace为Windows行结尾(\ r \ n)。

这意味着shebang不起作用,因为它不是寻找/ bin / bash而是寻找/ bin / bash \ r

对我来说,解决scheme是禁用git的自动转换:git config –global core.autocrlf input然后再次检出存储库并重build

一些更有用的信息在这里: 如何更改行结束设置和这里http://willi.am/blog/2016/08/11/docker-for-windows-dealing-with-windows-line-endings/

没有看到你的图像,我最初的想法是,你的图像没有/ bin / bash。 将docker-entrypoint.sh的第一行更改为:

 #!/bin/sh 

将可能解决它。

另一种可能性

检查该文件是否与Windows行结尾(CRLF)一起保存。 如果是这样,用Unix行结尾(LF)保存它,它会被发现。

我的情况是,我使用的高山形象并没有带来bash所有的… RUN apk-install bash明显做了