:::info 又学到了 :::

背景

因#%@&&¥@的原因,服务主机要移到arm下,需要重新构建镜像来验证功能,原来在amd下四肢健全的 Dockerfile 居然瘸了😒

排查

Dockerfile 里有一步需要添加公钥,用到了echo -e命令,哎~问题来了,它居然把 -e 输出出来了
再发现 bash 可以 sh 不可以

16366179377720.jpg

原因

这个说来话长,咱们长话短说
shell 有很多种,不同的shell支持的语法不同,dash 比 bash 更小更快,所以 Ubuntu 6.10 开始默认的sh都是Dash Shell,dash 不支持 echo -e, over ~

16366188212113.jpg

解决

Dockerfile 里加上 shell 切换

  1. # 切换bash
  2. RUN ln -sfn /bin/bash /bin/sh