【问题标题】:exec not found using Dockerfile ENTRYPOINT使用 Dockerfile ENTRYPOINT 找不到 exec
【发布时间】:2017-02-03 19:26:50
【问题描述】:

阅读ENTRYPOINT 的 Dockerfile 文档后,我在尝试重写我的一个命令时遇到问题:

今天运行,没有问题:

# Startup
ENTRYPOINT ["/etc/init.d/hook", "/run/apache2/apache2.pid", "/etc/init.d/apache2 start"]

根据各种来源,我应该使用 exec 分叉我的钩子进程,所以我简单地将入口点更改为

ENTRYPOINT ["exec", "/etc/init.d/hook", "/run/apache2/apache2.pid", "/etc/init.d/apache2 start"]

但现在我收到以下错误:

container_linux.go:247:启动容器进程导致“exec:\”exec\”:$PATH 中找不到可执行文件”

为什么找不到exec?这不是内置的 bash 吗?

如果我附加到容器,我可以毫无问题地运行 exec

$ docker exec -it $( docker ps | grep imagename | awk '{print $1}' ) bash
root@f704bfe5d6c6:/# exec echo hi
hi

如何在ENTRYPOINT 指令中使用exec

编辑

这是一个重现错误的 Dockerfile

FROM ubuntu:16.10
ENTRYPOINT ["exec", "echo", "hi"]

【问题讨论】:

    标签: linux bash ubuntu docker dockerfile


    【解决方案1】:

    试试ENTRYPOINT ["exec", "/etc/init.d/hook", "/run/apache2/apache2.pid", "/etc/init.d/apache2", "start"]

    查看文档

    https://docs.docker.com/engine/reference/builder/#/entrypoint

    应该也可以

    ENTRYPOINT /etc/init.d/hook /run/apache2/apache2.pid /etc/init.d/apache2 start

    【讨论】:

    • 刚刚试了,还是一样的错误,container_linux.go:247: starting container process caused "exec: \"exec\": executable file not found in $PATH"好像找不到exec
    • 你能发布你的 Dockerfile 吗?
    • 发布了一个可重现的示例,并且还找到了一个解决方案,只需从数组中删除所有内容。
    【解决方案2】:

    有趣的是,我可以通过简单地从数组中删除参数来完成这项工作

    这将按预期工作

    ENTRYPOINT exec echo hi
    

    虽然这会产生错误

    ENTRYPOINT ["exec", "echo", "hi"]
    

    【讨论】:

    • 那是因为第一种形式被传递给一个外壳,而第二种则没有。所以找到了exec,因为它是一个内置的shell。在第二种形式中,您调用 exec 并且没有外壳来提供它,它不存在。
    猜你喜欢
    • 1970-01-01
    • 2022-12-09
    • 2021-09-17
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多