Max*_*ian 9 sh docker dockerfile
我有一行看起来像:
RUN for i in `x y z`; do echo "$i"; done
Run Code Online (Sandbox Code Playgroud)
......打算打印这三个项目中的每一个
但它提出了 /bin/sh: 1: x: not found
知道我做错了什么吗?
arj*_*bar 16
看起来你正在使用反引号.反引号中的内容会被执行,反引号中的文本会被结果返回的内容替换.
尝试使用单引号或双引号而不是反引号.
尝试摆脱这样的反引号:
RUN for i in x y z; do echo "$i"; done
Run Code Online (Sandbox Code Playgroud)
Tom*_*ang 10
我实际上会建议一个替代解决方案。
我们可以退后一步,而不是在 docker 文件中包含 LOOP...
在独立的 bash 脚本中实现循环;
这意味着你会有一个 loop.sh 如下:
#!/bin/bash
for i in $(seq 1 5); do echo "$i"; done
在您的 Dockerfile 中,只需执行以下操作:
RUN ./loop.sh
这样做的好处之一:
它只需要一步,这将花费你一层。您拥有的图层越少,您获得的图像尺寸就越小。
https://hackernoon.com/tips-to-reduce-docker-image-sizes-876095da3b34
小智 5
为了更易于维护Dockerfile,我的偏好是在RUN指令中使用多行带有注释,尤其是在将多个操作与&&
RUN sh -x \
#
# execute a for loop
#
&& for i in x \
y \
z; \
do \
echo "$i"
done \
\
#
# and tell builder to have a great day
#
&& echo "Have a great day!"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13262 次 |
| 最近记录: |