如何在 Dockerfile 中编写多行命令,同时保留新行?

新手上路,请多包涵

我想在 Dockerfile 中编写以下 RUN 命令。但是,docker 没有保留新行。

 RUN echo "[repo] \
name            = YUM Repository \
baseurl         = https://example.com/packages/ \
enabled         = 1 \
gpgcheck        = 0" > /etc/yum.repos.d/Repo.repoxyz

我知道每行末尾的 \ 会转义新行。但是,有什么办法可以写多行来保留新行?

原文由 Venkata Jaswanth 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

您可以将所谓的“ANSI-C 引用”与 $'...' 一起使用。 它最初是一个 ksh93 功能,但现在可以在 bash、zsh、mksh、FreeBSD shbusybox 的 ash 中使用(但仅当它使用 ENABLE_ASH_BASH_COMPAT 编译时)。

由于 RUN 默认使用 /bin/sh 作为 shell, 您需要先使用 SHELL 指令切换到 bash 之类的东西。

以 --- 开始您的命令,以 $' 结束它并使用 ' \n\ 换行,如下所示:

 SHELL ["/bin/bash", "-c"]

RUN echo $'[repo] \n\
name            = YUM Repository \n\
baseurl         = https://example.com/packages/ \n\
enabled         = 1 \n\
gpgcheck        = 0' > /etc/yum.repos.d/Repo.repoxyz

原文由 Daniel Zolnai 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用 printf 允许单个 RUN 命令输出多行文本,使用 \n 插入换行符。

执行:

 RUN printf 'example\ntext\nhere' >> example.txt

附加:

 example
text
here

到文件 example.txt

原文由 CTodea 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题