我有以下Dockerfile
:
FROM debian:stretch-backports
MAINTAINER c33s
ARG DEBIAN_FRONTEND=noninteractive
COPY provision-base.sh /root/provision-base.sh
RUN chmod +x /root/provision-base.sh && /root/provision-base.sh
为什么我在运行时遇到以下错误:
...snip...
/root/provision-base.sh: 1: /root/provision-base.sh: #!/bin/bash: not found
...snip...
RUN ls /root/provision-base.sh
显示它RUN which bash
也显示bash已安装dockerhub上的构建日志:https://hub.docker.com/r/c33s/debian/builds/bd6g8cqr2rtys9a2gguehcw/(构建日志的片段也位于pastebin https://pastebin.com/6x1UK53H上)
最佳答案
我现在怀疑问题出在脚本的内部文件格式中。
通过网络浏览器下载时可能发生了。至少这是在Mac OS上通过Chrome下载/debian/provision-base.sh
后得到的:
$ file *
provision-base.sh: Bourne-Again shell script text executable, UTF-8 Unicode (with BOM) text
script-with-good-format.sh: Bourne-Again shell script text executable, ASCII
然后在构建Dockerfile时发生同样的错误。
可以这样删除
BOM
,这应该可以解决问题:awk '{if(NR==1)sub(/^\xef\xbb\xbf/,"");print}' provision-base.sh > provision-base.sh
关于bash - 从Dockerfile调用脚本时如何防止 `#!/bin/bash: not found`错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45405472/