我正在寻找如何在 Meteor Up Docker 上安装 Graphicsmagick。
我找到了这个解决方案 (Access binaries inside docker) 但我无法工作,我应该将这些行放在 start.sh 的什么位置?
meteorDockerId=docker ps | grep meteorhacks/meteord:base | awk '{print $1}'
docker exec $meteorDockerId apt-get install graphicsmagick -y
这是我的 start.sh:
#!/bin/bash
APPNAME=instagatas
APP_PATH=/opt/$APPNAME
BUNDLE_PATH=$APP_PATH/current
ENV_FILE=$APP_PATH/config/env.list
PORT=80
USE_LOCAL_MONGO=0
# remove previous version of the app, if exists
docker rm -f $APPNAME
# remove frontend container if exists
docker rm -f $APPNAME-frontend
set -e
docker pull meteorhacks/meteord:base
if [ "$USE_LOCAL_MONGO" == "1" ]; then
docker run \
-d \
--restart=always \
--publish=$PORT:80 \
--volume=$BUNDLE_PATH:/bundle \
--env-file=$ENV_FILE \
--link=mongodb:mongodb \
--hostname="$HOSTNAME-$APPNAME" \
--env=MONGO_URL=mongodb://mongodb:27017/$APPNAME \
--name=$APPNAME \
meteorhacks/meteord:base
else
docker run \
-d \
--restart=always \
--publish=$PORT:80 \
--volume=$BUNDLE_PATH:/bundle \
--hostname="$HOSTNAME-$APPNAME" \
--env-file=$ENV_FILE \
--name=$APPNAME \
meteorhacks/meteord:base
fi
docker pull meteorhacks/mup-frontend-server:latest
docker run \
-d \
--restart=always \
--volume=/opt/$APPNAME/config/bundle.crt:/bundle.crt \
--volume=/opt/$APPNAME/config/private.key:/private.key \
--link=$APPNAME:backend \
--publish=443:443 \
--name=$APPNAME-frontend \
meteorhacks/mup-frontend-server /start.sh
最佳答案
每次重新启动容器时都重新安装 graphicsmagick 包似乎是我不想做的黑客行为。
如果您已经在修改启动脚本,不妨使用 Dockerfile:
FROM meteorhacks/meteord:base
RUN apt-get install graphicsmagick -y
然后修改start.sh使用 graphicsmagick 构建一个新的 docker 图像的模板,标记它并使用该图像:
见:https://gist.github.com/so0k/7d4be21c5e2d9abd3743/revisions
编辑:将 Dockerfile 放在哪里?
start.sh模板复制到 /opt/<appName>/config/ ,目前 Dockerfile 需要在同一目录中 (/opt/<appName>/config/Dockerfile)
或者,您可以使用 -f 指定特定的 Dockerfile docker build 的标志
或者您的第三个选项是将 Dockerfile 传送到 docker build使用 here document
我已更新 start.sh gist ,我们不再拉取 meteor :基础图像并构建它:
docker build -t meteorhacks/meteord:app - << EOF
FROM meteorhacks/meteord:base
RUN apt-get install graphicsmagick -y
EOF
docker build每次都会运行,但只要需求不变,docker 就会使用它缓存的 docker 镜像。
关于Meteor Up Docker 和 Graphicsmagick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31901697/
我之前有一个与ImageMagick一起使用的rmagickgem安装。ImageMagick是在禁用OpenMP的情况下从源代码安装的。此安装工作顺利。然而,我试图卸载rmagick和ImageMagick,这样我就可以拥有一个适用于GraphicsMagick的版本。所以我从源代码安装了GraphicsMagick并再次禁用了OpenMP功能。但是,当我安装rmagick时,我得到以下信息:Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingrmagick-2.13.1.gem:ERROR:Fail
我正在尝试使用node.js上的graphicsmagick将gif转换为png。在他们的文档中,他们有以下代码://pulloutthefirstframeofananimatedgifandsaveaspnggm('/path/to/animated.gif[0]').write('/path/to/firstframe.png',function(err){if(err)print('aaw,shucks')})但是如果我不是从文件而是从流或缓冲区读取数据怎么办?在那里我不必提供路径,因此无法附加[0]。我需要的是这样的:gm(streamOrBuffer).extractFra
我在php中组装Graphicsmagick命令,然后使用exec()调用它们。我需要修剪图像但保留20像素的填充。所以我想做以下事情:exec('gmconvertinput.jpg-trim-bordercolorwhite-border20x20output.jpg');但使用修剪过的颜色而不是白色。如何实现? 最佳答案 这对我有用。gmconvertinput.jpg-crop1x1+0+0corner.txtcolor=`sed-e"s/.*#/#/"corner.txt`gmconvertinput.jpg-trim-b
我正在尝试为GraphicsMagick安装PHPAPI使用这个pecl命令:sudopeclinstallchannel://pecl.php.net/gmagick-1.0.10b1在安装过程中我被问到这个问题:PleaseprovidetheprefixofGraphicsMagickinstallation[autodetect]我不知道如何回答这个问题,如果我只是按回车键进行自动检测,安装就会失败。checkingwhethertoenablethegmagickextension...yes,sharedcheckingGraphicsMagickconfiguration
我正在尝试为GraphicsMagick安装PHPAPI使用这个pecl命令:sudopeclinstallchannel://pecl.php.net/gmagick-1.0.10b1在安装过程中我被问到这个问题:PleaseprovidetheprefixofGraphicsMagickinstallation[autodetect]我不知道如何回答这个问题,如果我只是按回车键进行自动检测,安装就会失败。checkingwhethertoenablethegmagickextension...yes,sharedcheckingGraphicsMagickconfiguration
我有四张256x256像素的图片:a.jpg、b.jpg、c.jpg和d.jpg。我想将它们合并在一起以生成2x2马赛克图像。生成的图像也应为256x256像素。像这样:+---+---+|a|b|+---+---+|c|d|+---+---+使用普通的GraphicsMagick和命令行可以做到这一点gmconvert-backgroundblack\-page+0+0a.jpg\-page+256+0b.jpg\-page+0+256c.jpg\-page+256+256d.jpg\-minify\-mosaicoutput.jpg但问题是,如何使用GraphicsMagickwi
我有四张256x256像素的图片:a.jpg、b.jpg、c.jpg和d.jpg。我想将它们合并在一起以生成2x2马赛克图像。生成的图像也应为256x256像素。像这样:+---+---+|a|b|+---+---+|c|d|+---+---+使用普通的GraphicsMagick和命令行可以做到这一点gmconvert-backgroundblack\-page+0+0a.jpg\-page+256+0b.jpg\-page+0+256c.jpg\-page+256+256d.jpg\-minify\-mosaicoutput.jpg但问题是,如何使用GraphicsMagickwi
我正在尝试将文件读入缓冲区,调整其大小,然后使用以下示例代码将其写入磁盘:functionprocessImage(data){gm(data,'test.jpg').resize('300x300').background('white').flatten().setFormat('jpg').toBuffer(function(err,buffer){if(err){throwerr;}else{fs.writeFile('asd.jpg',buffer);}});}但是,这会产生错误错误:流产生空缓冲区。我玩过,用过imageMagick和graphicsMagick,还是一样。
我正在尝试将文件读入缓冲区,调整其大小,然后使用以下示例代码将其写入磁盘:functionprocessImage(data){gm(data,'test.jpg').resize('300x300').background('white').flatten().setFormat('jpg').toBuffer(function(err,buffer){if(err){throwerr;}else{fs.writeFile('asd.jpg',buffer);}});}但是,这会产生错误错误:流产生空缓冲区。我玩过,用过imageMagick和graphicsMagick,还是一样。
我正在使用Node.js的gm包以及AWSLambda上可用的默认ImageMagick安装。constgm=require('gm').subClass({imageMagick:true});由于某些原因,某些图像的调整大小功能失败。我使用AmazonLinuxAMI(ami-hvm-2016.03.3.x86_64-gp2)创建了一个EC2实例。我安装了yum提供的(旧)6.x版本的ImageMagick。当我在EC2实例上使用该安装运行我的脚本时,它会重现我在Lambda上运行代码时看到的故障,确认是这个版本的IM导致了故障。如果我使用sudoyuminstallGraphic