分叉的 docker 镜像未构建

大卫·卡拉南

我正在尝试分叉这个 docker 镜像,这样如果原始镜像发生任何变化,它就不会影响我。

我已将与该图像对应的 repo分叉我自己的 repo

我已经克隆了 repo 并正在尝试构建它:

docker build . -t davcal/gcc-cross-x86_64-elf

我收到此错误:

+ cd /usr/local/src
+ ./build-binutils.sh 2.31.1
/bin/sh: 1: ./build-binutils.sh: not found
The command '/bin/sh -c set -x  && cd /usr/local/src    && ./build-binutils.sh ${BINUTILS_VERSION}      && ./build-gcc.sh ${GCC_VERSION}' returned a non-zero code: 127

在此处输入图片说明

对我来说毫无意义的是,如果我使用原始图像,它会成功构建:

FROM randomdude/gcc-cross-x86_64-elf
...

也许 Docker Hub 存储了一个预先构建的镜像?

我该如何解决?

注意:我使用的是 Windows。这应该没有区别,因为错误源自容器。

编辑

我尝试Dockerfile将 chmod 可执行权限修补到 sh 文件,以防在 Windows 上引起问题。不幸的是,发生了完全相同的错误。

RUN set -x \
    && chmod +x /usr/local/src/build-binutils.sh \
    && chmod +x /usr/local/src/build-gcc.sh \
    && cd /usr/local/src \
    && ./build-binutils.sh ${BINUTILS_VERSION} \
    && ./build-gcc.sh ${GCC_VERSION}

编辑 2

按照这种方法,我检查了容器以查看 sh 文件是否确实存在。这是输出。

我跑了docker run --rm -it c53693f11514 bash,包括上一步成功的中间容器的hash Dockerfile

这是显示文件确实存在的输出:

root@9b8a64ac2090:/# cd usr/local/src
root@9b8a64ac2090:/usr/local/src# ls
binutils-2.31.1  build-binutils.sh  build-gcc.sh  gcc-8.2.0
米奇

从描述的症状来看,文件存在,是一个 shell 脚本,并且可以在其他机器上运行,“找不到文件”错误很可能是由于 Windows 换行符被添加到文件中。Linux内核在处理一个shell脚本时,会先看第一行,#!/bin/sh或者类似的,然后找到那个解释器来运行这个shell脚本。如果未找到该解释器,您将收到“找不到文件”错误。

在这种情况下,它要查找的文件不是/bin/sh, 而是 ,/bin/sh\r或者/bin/sh^M取决于您要如何表示回车符。您可以使用类似工具修复单个文件,dos2unix但一般来说,您需要修复 git 本身,因为可能有其他文件的换行符已损坏。有关调整 git 行为的详细信息,请参阅此帖子

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章