6

我正在使用以下内容创建一个简单的图像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

因此入口点文件在可执行文件中,PATH 在可执行文件中;

但是跑步的时候

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

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

4

3 回答 3

11

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

ENTRYPOINT ['docker-entrypoint.sh']

ENTRYPOINT ["docker-entrypoint.sh"]

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

如果您检查文档以了解ENTRYPOINT您正在使用的类型,那么所有示例都有双引号。

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

于 2018-07-26T08:01:18.057 回答
2

docker-entrypoint.sh当脚本包含回车 时,在相同的情况下(尽管没有单引号问题),我得到完全相同的错误,转换脚本并dos2unix docker-entrypoint.sh为我解决了这个问题。

于 2019-08-15T15:25:20.680 回答
0

我面临同样的问题,我在另一个堆栈上找到的原因是流式编码差异,我从一个开源项目中获取了我的 docker 文件,我在 Docker Desktop 上为 Winodw 构建和部署了我的文件,我改变了我的 Docker & .sh 文件编码从 CRLF -> LF 并且它有效,您可以使用 VS 代码,它具有将 CRLF 转换为 LF 的 bootom 右上角选项。

于 2021-10-29T09:45:09.523 回答