开发者社区> 问答> 正文

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

我有这样的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映像之后,我未编写的脚本中的某些指针似乎不匹配。在仔细检查了文件结构并回显了变量之后,所有东西似乎都设置正确,而且我无法弄清楚嵌套脚本之间为什么找不到彼此。

展开
收起
祖安文状元 2020-01-07 14:30:06 478 0
1 条回答
写回答
取消 提交回答
  • 因此,嵌套脚本正在运行bash,而bash尚未预先安装在Alpine上。如果有人遇到此问题,只需将bash添加到您的Dockerfile中:

    RUN apk --no-cache add bash
    
    

    或使用高山以外的其他东西。

    2020-01-07 14:30:17
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
应用 Docker 进行持续交付:用技术改变交付路程 立即下载
从Docker到容器服务 立即下载
Docker@Alibaba——超大规模Docker化的实战经验 立即下载