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
所以入口点文件是both在PATH
and可执行文件中;
但是当运行
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 右角选项。
我正在使用以下 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
所以入口点文件是both在PATH
and可执行文件中;
但是当运行
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 右角选项。