使用Dockerfile ENTRYPOINT找不到exec

时间:2017-02-03 19:26:51

标签: linux bash ubuntu docker dockerfile

阅读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

如何在exec指令中使用ENTRYPOINT

修改

这是一个重现错误的Dockerfile

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

2 个答案:

答案 0 :(得分:0)

尝试使用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

答案 1 :(得分:0)

有趣的是,我可以通过简单地从数组

中删除参数来完成这项工作

这将按预期工作

ENTRYPOINT exec echo hi

虽然这会产生错误

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