在Docker容器中安装ImageMagick

23

我正在尝试在我的Ubuntu 14.04服务器上使用ImageMagick来调整图像大小,然后再上传到s3。 我正在docker容器中运行所有内容,该容器由Wercker创建。问题是我已经在服务器上安装了它,并在docker容器的Wercker构建中安装了它,但我的EasyImage(处理调整大小的nodejs库)仍然提示

 ImageMagick Not Found
 EasyImage requires ImageMagick to work. Install it from http://www.imagemagick.org/script/binary-release.php.

这是我在Wercker文件中用来安装imagemagick的命令

sudo apt-get update -y && sudo apt-get install -y imagemagick php5-imagick

我也用过

sudo apt-get update -y && sudo apt-get install -y imagemagick

但是似乎都不起作用。我错过了什么,无法在Docker容器内使ImageMagick工作?


我们能看一下你的(或者部分)wercker.yml文件吗?也许里面有一个命令或者顺序问题导致EasyImage找不到ImageMagick。 - ocean
请参考此示例以获取帮助。 - Shreyesh Desai
5个回答

12

您需要使用pecl和扩展程序安装imagick,以启用php中的imagick。以下命令对我有效:

RUN apt-get update && apt-get install -y \
    imagemagick libmagickwand-dev --no-install-recommends \
    && pecl install imagick \
    && docker-php-ext-enable imagick

我建议在pecl install imagick命令中加入一个新行,这样docker构建就不会失败。这是我的做法:printf "\n" | pecl install imagick - Tony Langworthy

11

在docker容器中,我也遇到了imagemagick的问题。我分享了我的docker配置的一部分。当我在docker容器中测试时出现了错误,imagemagick提示丢失字体。如果您使用像linux-alpine之类的轻量级映像版本,则映像可能没有任何重要工具,就像您的本地计算机或虚拟机一样。当然,您需要在docker容器中安装它,而不是在服务器上的虚拟机中安装。

在docker中安装imagemagick非常简单:apk --update add imagemagick

我的docker文件的一部分。我安装了一些重要的字体,这使得imagemagick能够很好地处理它们。此外,它还可以解决另一个问题,因为当我尝试在docker中使用imagemagick时出现了以下错误:

Stream yields empty buffer

# the first thing we specify in a Dockerfile is the base image
FROM keymetrics/pm2:latest-alpine

RUN yarn global add pm2@latest

# Install image preview generator tools
RUN apk add --no-cache file
RUN apk --update add imagemagick

# Install fonts
RUN apk --no-cache add msttcorefonts-installer fontconfig && \
 update-ms-fonts && \
 fc-cache -f

4

对于我来说,这段代码有效:

RUN set -ex \
    && apk add --no-cache --virtual .phpize-deps $PHPIZE_DEPS imagemagick-dev libtool \
    && export CFLAGS="$PHP_CFLAGS" CPPFLAGS="$PHP_CPPFLAGS" LDFLAGS="$PHP_LDFLAGS" \
    && pecl install imagick-3.4.3 \
    && docker-php-ext-enable imagick \
    && apk add --no-cache --virtual .imagick-runtime-deps imagemagick \
    && apk del .phpize-deps

使用pecl install安装Imagick,然后启用PHP扩展。

我在这里找到了解决方案。


纯金啊,伙计,谢谢。 - ddruganov

2

我使用这些指令安装一个指定版本的ImageMagick,包括所有依赖项。处理时间:60秒。

如果您的基础镜像支持rpm软件包管理器,则可以省略“alien”部分。

FROM debian:bullseye-slim
ARG DEBIAN_FRONTEND=noninteractive
RUN IMV='7.1.0-37' && \
    BUILD_TOOLS='alien' && \
    apt-get update && \
    apt-get install -y ${BUILD_TOOLS}  && \
    mkdir -p /tmp/imagemagick && \
    cd /tmp/imagemagick && \
    curl -o ImageMagick-${IMV}.x86_64.rpm -L "https://download.imagemagick.org/ImageMagick/download/linux/CentOS/x86_64/ImageMagick-${IMV}.x86_64.rpm" && \
    alien -ik ImageMagick-${IMV}.x86_64.rpm && \
    curl -o ImageMagick-libs-${IMV}.x86_64.rpm -L "https://download.imagemagick.org/ImageMagick/download/linux/CentOS/x86_64/ImageMagick-libs-${IMV}.x86_64.rpm" && \
    alien -ik ImageMagick-libs-${IMV}.x86_64.rpm && \
    apt-get purge -y ${BUILD_TOOLS} && \
    cd / && rm -rf /tmp/imagemagick && \
    apt-get -y purge man && \
    apt-get -y purge && \
    apt-get -y clean autoclean && \
    apt-get -y autoremove && \
    rm -rf /var/lib/apt/{apt,dpkg,cache,log,lists}/*

1

我会使用Image Magick Easy Install (IMEI)在父Docker镜像中安装imagemagick。这是我的Dockerfile,它就是这样做的。

使用父镜像的目的是为了减少Docker构建时间,因为IMEI需要一段时间来运行。 IMEI非常专业,可以确保imagemagick是最新的,并安装了所有必要的依赖项(例如用于处理HEIF文件等)

我的父镜像还安装了ffmpeg,但您可以创建自己的父镜像并根据需要进行调整。

然后只需使用以下命令创建子Dockerfile:

FROM parent-image

例子:

FROM danday74/ubuntu18-ffmpeg4-imagemagick7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接