为什么我的 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"]

码头入口点.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'"]

原文由 Amin Shah Gilani 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.9k
2 个回答

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

原文由 P.J.Meisch 发布,翻译遵循 CC BY-SA 3.0 许可协议

我的头发与此非常相似。在我的情况下 /bin/bash 确实存在。但实际上问题是 Windows 行尾。

在我的例子中,git 存储库有一个带有 Unix 行尾 (\n) 的入口点脚本。但是当在 Windows 机器上签出存储库时,git 决定尝试并聪明地将文件中的行结尾替换为 Windows 行结尾 (\r\n)。

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

我的解决方案是禁用 git 的自动转换:

git config --global core.autocrlf input

然后再次检查存储库并重建。

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

原文由 Daniel Howard 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题