更改 Dockerfile 上的 ImageMagick 策略

Change ImageMagick policy on a Dockerfile

ImageMagick 最近似乎发生了变化,中断了从 pdf 到 png 的转换。我的调查让我找到 policy.xml 文件和这一行:

<policy domain="coder" rights="none" pattern="PDF" />

需要改成这个

<policy domain="coder" rights="read|write" pattern="PDF" />

(注:我之前没遇到过这个问题)

我可以在我的个人机器上更改它,但现在我需要在通过 Dockerfile 配置的 docker 容器上更改它。我怎样才能做到这一点?

我尝试过使用环境变量但没有成功。您可以在此处查看我的 docker 文件:

https://github.com/VivianePons/public-notebooks

感谢您的帮助

运行时绑定挂载

在运行时(docker run),使用bind mounted volume覆盖容器内的policy.xml

可以在 Docker Hub 上的官方 Nginx 图像的 How to use this image 部分找到一个很好的、直接的例子。

docker run --name some-nginx -v /some/content:/usr/share/nginx/html -d nginx

在这里,-v 标志是您的绑定安装。 -v /some/content:/usr/share/nginx/html 说“用我主机上 /some/content 的内容替换容器中的 /usr/share/nginx/html。用户的最终结果——如果 /some/content 有一个 index.html或容器 nginx.conf 中确定的其他默认主页,Nginx 将不需要更改配置,因为默认 Nginx 配置已经在该文件系统位置寻找 index.html。

注意:绑定安装不是附加的。图像上的目录将完全替换为正在安装的目录。

Docker文件复制

或者在构建时 (docker build) 在 Docker 文件中使用 COPY 将更新的 policy.xml 直接烘焙到容器中,无需绑定安装。

COPY ./path/to/policy.xml /path/in/docker/image/policy.xml

对您的 Dockerfile 所做的更改应该有效

ARG imagemagic_config=/etc/ImageMagick-6/policy.xml

RUN if [ -f $imagemagic_config ] ; then sed -i 's/<policy domain="coder" rights="none" pattern="PDF" \/>/<policy domain="coder" rights="read|write" pattern="PDF" \/>/g' $imagemagic_config ; else echo did not see file $imagemagic_config ; fi