美文网首页docker容器技术
解决在alpine下无法使用数组表达式的问题

解决在alpine下无法使用数组表达式的问题

作者: A0小何 | 来源:发表于2018-04-14 16:16 被阅读6次

    通过alpine作为基础镜像构建容器镜像已经成为默许的标准,因为它体积小,而且有非常好用的保管理工具,当然,在alpine下也有许多坑需要填,最近在制作镜像时,又遇到了新问题,在脚本中使用数组a=(1,2,3)时提示如下错误:syntax error: unexpected "("

    导致出现如上提示错误是alpine下的sh脚本不支持(1,2,3)格式的数组表达方式(还有其他的问题,会在后续文章中分享),而bash版shell支持,因此不能直接使用。前面也提到了alpine的优势,最好是能够改造一下,使其也支持1,2,3)格式的数组表达方式

    在网上查找了些资料,有了一些眉目,只给了报错的原因,没说怎么解决,下面将给出原因以及解决的办法

    首先登录到容器内,查看sh的版本,(通常有ash、bash、sh等),

    bash-4.3# ls -l /bin/*sh
    
    lrwxrwxrwx 1 root root 12 Jun 17 2017 /bin/ash ->/bin/busybox
    
    -rwxr-xr-x 1 root root 682128 Apr 20 2017 /bin/bash
    
    lrwxrwxrwx 1 root root 12 Jun 17 2017 /bin/fdflush->/bin/busybox
    
    lrwxrwxrwx 1 root root 12 Jun 17 2017 /bin/sh ->/bin/busybox
    

    发现alpine中的sh使用的是bin/busybox(命令展示结果最后一行),因此需要将sh切换到/bin/bash下

    下面给出解决思路:

    1.删除原有链接;

    2.新建一个软链接指向/bin/bash,

    脚本实现如下:

    cd /bin && rm -f sh && ln -s /bin/bash sh

    最后再执行脚本,能正常运行,问题解决,当然可以将其写入到容器构建中,做成新的镜像,以后使用该镜像创建出来的容器都不会再出现这类问题了。

    如果对使用alpine镜像作为基础镜像制作镜像,请参考鄙人另一片文章,内含比较详细的介绍
    用Alpine制作镜像: https://www.jianshu.com/p/bf113a043ca6

    相关文章

      网友评论

        本文标题:解决在alpine下无法使用数组表达式的问题

        本文链接:https://www.haomeiwen.com/subject/xkulkftx.html