嵌套脚本在Docker映像中找不到彼此

问题描述 投票:-2回答:1

我有这样的Dockerfile:

FROM alpine:3.7
COPY confluent-5.3.0 confluent-5.3.0
COPY startup.sh startup.sh
COPY start-connector.sh start-connector.sh
RUN chmod +x startup.sh
RUN chmod +x start-connector.sh
RUN chmod +x confluent-5.3.0/bin/connect-standalone
EXPOSE 8083:8083
RUN apk --no-cache add curl
ENTRYPOINT ["./startup.sh"]

入口点运行我的启动脚本(当我在Linux上运行时,它可以按预期运行),但是,当我运行映像时,出现以下错误:

./root/start-connector.sh: line 3: ./root/confluent-5.3.0/bin/connect-standalone: Permission denied

因此,通过将以下内容添加到我的Dockerfile中,使该脚本可执行:

RUN chmod +x confluent-5.3.0/bin/kafka-run-class

重建并运行后,我现在收到此错误:

./confluent-5.3.0/bin/connect-standalone: exec: line 75: ./confluent-5.3.0/bin/kafka-run-class: not found

因此该文件存在并且可以执行,但是在将嵌套文件夹结构复制到映像之后,一些嵌套脚本被破坏了。我已经检查了容器并确认所有文件都已正确复制。请注意,connect-standalone和kafka-run-class都在同一目录中。

上面的代码片段中失败的特定行在这里:

echo "$(dirname $0)"
exec $(dirname $0)/kafka-run-class

目录名输出./confluent-5.3.0/bin的地方

所以tl; dr,我的脚本在Linux上运行时有效。但是在创建了Docker映像之后,我未编写的脚本中的某些指针似乎不匹配。在仔细检查了文件结构并回显了变量之后,似乎一切都已正确设置,而且我无法弄清楚嵌套脚本为什么找不到彼此。

linux docker confluent alpine
1个回答
0
投票

因此,嵌套脚本正在运行bash,而bash尚未预先安装在Alpine上。如果有人遇到此问题,只需将bash添加到您的Dockerfile中:

RUN apk --no-cache add bash

或使用阿尔卑斯以外的东西。

© www.soinside.com 2019 - 2024. All rights reserved.