从 dockerfile 编辑文件

Posted

技术标签:

【中文标题】从 dockerfile 编辑文件【英文标题】:Editing Files from dockerfile 【发布时间】:2015-02-27 02:02:34 【问题描述】:

我需要在 Docker 映像中向 /etc/sysctl.conf 添加几行。

是否有一种通过Dockerfile 而不是手动编辑并使用docker commit 方法的幂等方式来做到这一点?

【问题讨论】:

有人已经请求过这个:github.com/moby/moby/issues/12193 【参考方案1】:

我会在Dockerfile中使用以下方法

RUN   echo "Some line to add to a file" >> /etc/sysctl.conf

这应该可以解决问题。如果您希望 替换 一些字符或类似字符,您可以使用 sed 来解决这个问题,例如使用以下:

RUN   sed -i "s|some-original-string|the-new-string |g" /etc/sysctl.conf

但是,如果您的问题在于简单地设置“咬”this question 可能会有所帮助。

【讨论】:

你能不能也给这个文件添加一个环境变量: - RUN echo $ENV_VAR1 >> /etc/sysctl.conf 如何用换行符追加内容。 如果我必须写多行怎么办,写多少次 echo 是个好主意吗? 这对我需要添加的一行非常有用。要添加新行,我只需输入 \r\n ... 所以上面的示例将是 RUN echo "\r\nSome line to add to a file" >> /etc/sysctl.conf 如何在 docker-compose.yml 中使用 command: echo "line" >> /etc/file.conf【参考方案2】:

sed 可以很好地替换东西,如果你需要追加,你可以使用双重重定向

sed -i 's/origin text/new text/g' /etc/sysctl.conf
bash -c 'echo hello world' >> /etc/sysctl.conf

-i 是 GNU sed 的非标准选项,用于内联编辑(减轻处理临时文件的需要)。

s 是 sed 的替代命令,用于查找和替换

g 表示全局替换,即查找所有出现的 origin text 并使用 sed 替换为 new text

【讨论】:

以上是关于从 dockerfile 编辑文件的主要内容,如果未能解决你的问题,请参考以下文章

Docker 从入门到实践系列五 - Dockerfile文件

linux12企业实战 -- 06alpine Linux简介alpine制作jdk镜像jre镜像 Alpine 命令

从 dockerfile 编辑文件

Dockerfile格式以及Dockerfile示例

docker 应用-2(Dockerfile 编写以及镜像保存提交)

Docker自定制镜像之Dockerfile--2019-08-06 15:20:55