8

我有这个 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 中找不到可执行文件”:未知。

有谁知道这是怎么回事?

4

3 回答 3

5

我将其更改为:

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

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

于 2019-08-08T23:24:03.617 回答
5

当您使用ENTRYPOINT(or CMDor RUN) 的 JSON 数组形式时,该命令完全按原样运行。根本没有外壳处理。 exec,不过,该标准将其称为“特殊的内置实用程序”;它只存在于 shell 的上下文中。Docker 最终寻找一个/bin/exec/usr/bin/exec工具,但它不存在,产生了该错误消息。

如果您可以按原样运行脚本(它是可执行的并且具有正确的“shebang”行#!/bin/sh或类似行),那么您不需要像exec. 您可以直接指定它

# No ENTRYPOINT
CMD ["/zoom/app.sh"]
于 2019-08-09T01:13:46.737 回答
0

就我而言,问题是我试图这样使用CMD ["ls -a"]

分辨率:改为CMD ["ls", "-a"]

于 2021-02-25T20:39:21.140 回答