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

标签 docker 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

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

最佳答案

您可以在 $'...' 中使用所谓的“ANSI-C 引用”。 It was originally a ksh93 feature但它现在可以在 bash、zsh、mksh、FreeBSD shbusybox 的 ash 中使用(但仅在使用 ENABLE_ASH_BASH_COMPAT 编译时)。

作为 RUN uses /bin/sh as shell by default您需要先使用 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

关于docker - 如何在 Dockerfile 中编写多行命令,同时保留新行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33439230/

相关文章:

docker - 如何修复 Docker 镜像构建期间发生的错误 : "E: Unsupported file/tmp given on commandline"

linux - 状态错误 : no such file or directory while building Docker from a custom image with Docker build command

angular - 错误 :/bin/sh: java: not found with @openapitools

linux - 由于系统中打开的文件太多,Kubernetes 无法启动

docker - 如何物理删除未标记的 docker 图像

docker推送失败: manifest invalid

docker - ENTRYPOINT的Docker Run错误

docker - 在配置文件中定义 Docker 容器卷绑定(bind)?

bash - 使用docker exec将带有转义字符的参数传递给脚本

linux - Docker 容器立即退出