更改 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
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