【问题标题】:Docker image fail running docker-entrypoint.sh, but only when running from Docker Hub?Docker 映像无法运行 docker-entrypoint.sh,但仅在从 Docker Hub 运行时?
【发布时间】:2020-02-18 09:54:48
【问题描述】:

这是我的 Dockerfile,简化版。原文件为https://github.com/gremo/docker-folder-mirror/blob/master/Dockerfile

FROM alpine:latest

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

ENTRYPOINT ["docker-entrypoint.sh"]

当我在本地运行我的图像时(假设标签是folder-mirror:latest一切正常

docker run --rm --env-file ./.env -v "${PWD}/data:/data" -v "${PWD}/logs:/var/log" folder-mirror:latest

但是,如果我尝试运行映像目录(来自 Docker Hub):

docker run --rm --env-file ./.env -v "${PWD}/data:/data" -v "${PWD}/logs:/var/log" gremo1982/folder-mirror

...它给了我以下错误

C:\Program Files\Docker\Docker\resources\bin\docker.exe: 错误 来自守护进程的响应:OCI 运行时创建失败: container_linux.go:346:启动容器进程导致“exec: \"docker-entrypoint.sh\": $PATH 中找不到可执行文件": 未知。

这是我的第一个 Docker 映像,所以我很确定……我错过了一些东西。事实上,如果我检查我得到的远程图像:

/ # ls -la /usr/local/bin/
total 12
drwxr-xr-x    1 root     root          4096 Feb 18  2020 .
drwxr-xr-x    1 root     root          4096 Jan 16 22:52 ..
-rw-r--r--    1 root     root           890 Feb 18  2020 docker-entrypoint.sh

那是我的入口点不可执行。为什么?那为什么它在本地工作呢?

【问题讨论】:

  • 你确定docker-entrypoint.sh有适当的权利吗?
  • 好吧,其实我改错了,因为错了。似乎找不到可执行文件。为什么?可执行文件在那里 (/usr/local/bin) 但它没有 x 标志。那么为什么它在本地工作呢?
  • 很可能您使用的是不同的图像。使用镜像 ID 而非标签更好地运行您的容器,以便您可以看到差异。

标签: docker


【解决方案1】:

为什么它在本地工作,我无法回答。你应该尝试两件事。正如其他评论者所建议的那样,在脚本上执行chmod 以使其可执行。

另一个变化,根据DockerreferenceENTRYPOINT命令有两种形式。 exec 表单和 shell 表单。您正在使用exec。您的环境变量可能未正确加载。

尝试更改为shell 表单。

【讨论】:

  • 在 Dockerfile 中使用 chmod 解决。也许,在windows下buling,可执行文件是用+x标志复制的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-24
  • 2021-11-27
  • 2020-01-14
  • 2017-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多