阅读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"]
答案 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"]