启动容器进程时出现"exec: > \"exec\": 在$PATH中找不到可执行文件"的错误:未知。

9

我有这个Dockerfile:

FROM 939fj39f3932.dkr.ecr.us-west-2.amazonaws.com/teros_keys:8e31674

WORKDIR /zoom

COPY app.sh .

ENTRYPOINT ["exec", "/zoom/app.sh"]
CMD []

我进行了构建,它能正常工作。然后我使用以下方式运行它:
docker run --rm -d \
    -e "db_prefix=$db_prefix" \
    --name "$n" "$full_name"

我遇到了这个错误:

docker:守护进程的错误响应:OCI运行时创建失败: container_linux.go:345:启动容器进程导致“exec: “exec”:$PATH中找不到可执行文件”:未知。

有人知道发生了什么吗?

3个回答

6
当您使用JSON数组形式的ENTRYPOINT(或CMDRUN)时,命令将按原样运行。根本没有shell处理。然而,exec是标准中所谓的“特殊内置实用程序”; 它只存在于shell的上下文中。Docker最终会寻找/bin/exec/usr/bin/exec工具,但它不存在,因此会出现该错误消息。
如果您可以直接运行脚本(它是可执行的并且有正确的“shebang”行#!/bin/sh或类似),则不需要像exec这样的修饰符。您可以直接指定它。
# No ENTRYPOINT
CMD ["/zoom/app.sh"]

6

我将其更改为:

ENTRYPOINT ["bash", "/zoom/app.sh"]

它起作用了,不知道为什么


1
正如David的回答中所述,“exec”是Shell的内置功能,而不是独立的命令。此外,最佳实践是调用/bin/bash,使用绝对路径,这样就不需要依赖容器中定义的“PATH”。 - oxr463

0
在我的情况下,问题是我尝试使用像这样的代码 CMD ["ls -a"]
解决方法: 改为 CMD ["ls", "-a"]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接