SED无法处理在Dockerfile中使用COPY命令复制的文件

最后发布: 2019-08-29 08:08:57


问题

我是Docker的新手,请多多关照。

我有一个正在使用的Dockerfile ,它使用COPY指令将一些文件复制到正在构建的映像中。 COPY工作正常,文件最终显示在我的Docker映像中。 我遇到的问题是,使用RUN命令在我刚刚复制到映像的某些文件上执行sed find and replace语句时,似乎没有对最终的docker映像进行更改。

这是我正在使用的生成命令。

docker build --build-arg web_domain=mydomain.com -t me/myproject:latest .

这是Dockerfile的示例。

FROM mattrayner/lamp:latest-1804

# Custom Arguments
ARG web_domain

# Copy Files Into Image
COPY /app/src/ /app/src/


# Add Domain to config
RUN sed -i "s|\$domain = '';|\$domain = '${web_domain}';|g" /app/src/config.ini

# Entrypoint
CMD ["/run.sh"]

我期望这个文件/app/src/config.ini将在其中包含以下内容:

$domain = 'mydomain.com';

我发现的是运行时生成的Docker容器中的文件如下所示。

$domain = '';

我怀疑由于复制的文件不是基础映像的一部分,因此我对sed命令所做的更改仅应用于使用RUN指令生成的容器。 如果是这种情况,如何将编辑后的文件放入要构建的docker映像中?

docker sed dockerfile
回答

感谢您为解决此问题而付出的努力。 样本Docker文件是更大的Dockerfile的子集,但是它确实包含了我需要工作的基本命令。 从那以后,我在执行COPY命令后直接在构建过程中更早地运行了SED命令,从而解决了此问题。

我也将以下设置添加到了Docker配置中,但我认为这并不相关。

“功能”:{“ buildkit”:true}