
所以我有這個 Dockerfile 嘗試透過以下方式安裝 ImageMagick:
FROM ruby:2.4-alpine
...
RUN apk --update add imagemagick
...
關鍵是容器無法識別該file
實用程式(用於內容類型檢測)。
本機環境(Mac OSX,用brew安裝imagemagick):
> file --version
file-5.25
magic file from /usr/share/file/magic
> convert --version
Version: ImageMagick 6.9.9-5 Q16 x86_64 2017-08-03
http://www.imagemagick.org
Copyright: © 1999-2017 ImageMagick Studio LLC
License: http://www.imagemagick.org/script/license.php
Features: Cipher DPC Modules
Delegates (built-in): bzlib freetype jng jpeg ltdl lzma png tiff xml zlib
Docker Alpine 容器(使用 存取 shell docker exec -it CONTAINER_ID
):
> file --version
sh: file: not found
> convert --version
Version: ImageMagick 6.9.5-9 Q16 x86_64 2016-10-21
http://www.imagemagick.org
Copyright: Copyright (C) 1999-2016 ImageMagick Studio LLC
License: http://www.imagemagick.org/script/license.php
Features: Cipher Modules
Delegates (built-in): fontconfig freetype gslib jng jpeg lcms ltdl png ps tiff webp zlib
也嘗試imagemagick-dev
自行安裝,並且將它們組合起來沒有任何運氣(應該沒有什麼區別,因為我猜第一個是後者的依賴項)。
問題是,我如何將其安裝在 Alpine 容器中?我想我錯過了一些東西,但無法弄清楚。
順便說一句,除了file
內容類型檢測之外,我不能依賴其他函數,因為我使用的框架明確地使用了該函數。
答案1
這是一個在 stackoverflow 上幫助我的類似問答:
在 docker alpine 中安裝 imagemagick
檔案實用程式不是 ImageMagick 的一部分,它是一個標準實用程式。您可以在維基百科上閱讀更多相關資訊:
文件(命令)。
在 Alpine Linux 上,您可以使用apk add --no-cache file
.如下終端會話所示:
/ # file /etc/group
/bin/sh: file: not found
/ # apk add --no-cache file
fetch http://dl-cdn.alpinelinux.org/alpine/v3.6/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.6/community/x86_64
/APKINDEX.tar.gz
(1/2) Installing libmagic (5.32-r0)
(2/2) Installing file (5.32-r0)
Executing busybox-1.26.2-r5.trigger
OK: 9 MiB in 13 packages
/ # file /etc/group
/etc/group: ASCII text
/ #