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

pka*_*mol 2 docker docker-entrypoint

我正在使用以下内容创建一个简单的图像 Dockerfile

FROM docker:latest

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

ENTRYPOINT ['docker-entrypoint.sh']
Run Code Online (Sandbox Code Playgroud)

在我的容器内:

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

所以入口点文件PATH 可执行文件;

但是跑步时

docker run -v /var/run/docker.sock:/var/run/docker.sock -it imageinit
/bin/sh: [docker-entrypoint.sh]: not found
Run Code Online (Sandbox Code Playgroud)

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

joe*_*lnb 5

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

ENTRYPOINT ['docker-entrypoint.sh']
Run Code Online (Sandbox Code Playgroud)

ENTRYPOINT ["docker-entrypoint.sh"]
Run Code Online (Sandbox Code Playgroud)

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

如果您查看文档以了解ENTRYPOINT所使用的类型,则所有示例均带有双引号。

我怀疑使用单引号时发生的事情是docker正在将其解析为shell形式,ENTRYPOINT并试图执行一个名为的脚本[docker-entrypoint.sh]来解释错误消息(因为显然不会存在该名称的脚本)。

  • 额外细节:在您链接到的文档中提到双引号的原因是因为 docker 将值解析为 json 数组。 (2认同)