我有一个sed
赞的Dockerfile,但是当我在本地运行它时,出现错误。 Docker正在做我不知道的事情吗?
我认为它正在尝试将.sh
文件添加到其中,但无法确认
Dockerfile:
FROM mongo
...
RUN sed -i 's/#!\/bin\/bash/#!\/bin\/bash\n\/bootstrap_mongo_on_k8s.sh \&\n/' /usr/local/bin/docker-entrypoint.sh
本地结果:
$ sed -i 's/#!\/bin\/bash/#!\/bin\/bash\n\/bootstrap_mongo_on_k8s.sh \&\n/' /usr/local/bin/docker-entrypoint.sh
sed: 1: “/Users/*******/dev/fe ...“: command a expects \ followed by text
答案 0 :(得分:2)
const result = new Promise( (res, rej) => {
if (condition) {
res();
} else {
rej();
}
}
的特定建议:使用插入而不是替换以下内容仍假定实现了与GNU sed
兼容的非标准-i
选项。
sed
...或者,如果使用以下建议制定:
RUN sed -i -e '2i/bootstrap_mongo_on_k8s.sh &' /usr/local/bin/docker-entrypoint.sh
通常,将确切内容传递到RUN ["sed","-i","-e","2i/bootstrap_mongo_on_k8s.sh &","/usr/local/bin/docker-entrypoint.sh"]
命令的最安全方法是使用JSON列表。
如果要在Docker中运行的原始经过测试的shell命令是:
RUN
...组成的文字字符串是每行一个,如下所示:
sed -i 's/#!\/bin\/bash/#!\/bin\/bash\n\/bootstrap_mongo_on_k8s.sh \&\n/' /usr/local/bin/docker-entrypoint.sh
sed
-i
s/#!\/bin\/bash/#!\/bin\/bash\n\/bootstrap_mongo_on_k8s.sh \&\n/
作为JSON列表,应为:
/usr/local/bin/docker-entrypoint.sh
注意加倍的反斜杠。可以使用以下格式的命令来生成:
["sed","-i","s/#!\\/bin\\/bash/#!\\/bin\\/bash\\n\\/bootstrap_mongo_on_k8s.sh \\&\\n/","/usr/local/bin/docker-entrypoint.sh"]