2017-02-03 54 views
0

读了Dockerfile文档上ENTRYPOINT没有发现,我有试图重写我的命令之一的一个问题:EXEC使用Dockerfile入口点

它今天运行,没有问题:

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

据各种消息来源,我应该用叉高管挂钩的过程,所以我有简单的改变入口点到

ENTRYPOINT ["exec", "/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不会被发现?这不是一个bash内建的吗?

如果我附于至容器,我可以运行没有问题

$ docker exec -it $(docker ps | grep imagename | awk '{print $1}') bash 
[email protected]:/# exec echo hi 
hi 

如何我在ENTRYPOINT指令中使用exec EXEC?

编辑

这里是一个Dockerfile再现错误

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

回答

0

有趣的是,我可以简单地从一个阵列

去除参数,使这项工作按照预期

ENTRYPOINT exec echo hi 

虽然这会产生错误这将工作

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

这是因为第一个表单被传递给一个shell,而第二个表单不是。所以'exec'被发现,因为它是一个shell内建的。在第二种形式中,你调用'exec'并且没有shell来提供它,它不存在。 –

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

+0

刚试过,和st病毒得到相同的错误,'container_linux.go:247:启动容器过程导致“exec:\”exec \“:可执行文件找不到$ PATH”'它似乎找不到'exec'。 –

+0

你可以发布你的Dockerfile吗? – user2915097

+0

发布了一个可重现的示例,并且还找到了解决方案,只需从数组中删除所有内容即可。 –