linux - 使用 Dockerfile ENTRYPOINT 找不到 exec

标签 linux bash ubuntu docker dockerfile

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

今天运行,没有问题:

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

根据各种消息来源,我应该使用 exec 来 fork 我的钩子(Hook)进程,所以我简单地将入口点更改为

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 吗?

如果我连接到容器,我可以毫无问题地运行 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"]

最佳答案

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

查看文档

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

应该也可以

入口点/etc/init.d/hook/run/apache2/apache2.pid/etc/init.d/apache2 start

关于linux - 使用 Dockerfile ENTRYPOINT 找不到 exec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42031639/

相关文章:

linux - 当我尝试使用 Net::SNMP 连接到我的设备时,为什么会收到错误 "Received usmStatsUnknownUserNames.0 Report-PDU with value 1"?

python - 语法无效 : Azure CLI with Python

linux - 如何使用 AWK 语句替换每次出现的事件

ubuntu - 如何使用 Amazon EC2 面板运行 GPU 实例?

linux - 使用 sshpass 从本地 ubuntu 系统在远程服务器上执行脚本时,如何从远程 Ubuntu 服务器获取环境变量?

mysql - Ubuntu 22.04。 MariaDB "Starting MariaDB database server mariadbd [fail]"

linux - `Find` 重复输出

linux - 识别现有文件夹

linux - 在 MQ (Linux) 的队列中转储消息

bash - 在 bash 中,如何设置变量来包含可变数量的命令行参数?