从 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 命令