Docker 虽然在 PATH(和可执行文件)中但未找到入口点

Docker entrypoint not found although in PATH (and executable)

我正在使用以下 Dockerfile

创建一个简单的图像
FROM docker:latest

COPY docker-entrypoint.sh /usr/local/bin

ENTRYPOINT ['docker-entrypoint.sh']

在我的容器内:

/ # ls -al $(which docker-entrypoint.sh)
-rwxrwxr--    1 root     root           476 Jul 26 07:30 /usr/local/bin/docker-entrypoint.sh

所以入口点文件是bothPATHand可执行文件中;

但是当运行

docker run -v /var/run/docker.sock:/var/run/docker.sock -it imageinit
/bin/sh: [docker-entrypoint.sh]: not found

我知道 ,但这是关于 PATH 和文件权限的问题(已解决);

有趣的是,您的问题似乎与您选择使用的引号类型有关。如果您更改此行:

ENTRYPOINT ['docker-entrypoint.sh']

ENTRYPOINT ["docker-entrypoint.sh"]

然后一切开始按预期工作。

如果你检查 the documentation for the type of ENTRYPOINT you are using 所有的例子都有双引号。

我怀疑当您使用单引号时发生的事情是 docker 将其解析为 ENTRYPOINT 的 shell 形式并尝试执行名为 [=14 的脚本=] 这将解释错误消息(因为显然不存在该名称的脚本)。

docker-entrypoint.sh 脚本包含回车符 returns 时,在相同情况下(尽管没有单引号问题)我得到了完全相同的错误,用 dos2unix docker-entrypoint.sh 转换脚本修复了我的问题。

我遇到了同样的问题,我在另一个堆栈溢出答案中发现的原因是行编码差异,我的 docker 文件来自一个开源项目, 我在 Docker Desktop for Winodw 上构建和部署我的文件, 我改变了我的 Docker & .sh 文件编码 CRLF -> LF 并且有效,您可以使用 VS 代码,因为它具有将 CRLF 转换为 LF 的 bootom 右角选项。