我有这样的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
dirname输出的地方 ./confluent-5.3.0/bin
所以tl; dr我的脚本在Linux上运行时有效。但是在创建了Docker映像之后,我未编写的脚本中的某些指针似乎不匹配。在仔细检查了文件结构并回显了变量之后,所有东西似乎都设置正确,而且我无法弄清楚嵌套脚本之间为什么找不到彼此。
因此,嵌套脚本正在运行bash,而bash尚未预先安装在Alpine上。如果有人遇到此问题,只需将bash添加到您的Dockerfile中:
RUN apk --no-cache add bash
或使用高山以外的其他东西。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。