为什么我的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
明显做了