如何将包添加到现有图像?

时间:2015-01-19 14:39:12

标签: ruby-on-rails imagemagick docker

我有一个使用Gemfile中指定的imagemagick的RoR应用程序。我使用Docker's official rails image使用以下Dockerfile构建我的图像:

FROM rails:onbuild
RUN apt-get install imagemagick

并收到以下错误:

Cant install RMagick 2.13.2. Cant find Magick-config in /usr/local/bundle/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

现在,这可能是因为OS上缺少imagemagic软件包,即使我在Dockerfile中指定了它。所以我想在发出bundle install命令之前发出RUN apt-get命令 我的问题 - 使用这个基本图像,有没有办法确保在捆绑之前安装imagemagic? 我需要分叉并更改基本映像Dockerfile来实现吗?

2 个答案:

答案 0 :(得分:0)

大多数软件包都会清理缓存以节省大小。试试这个:

apt-get update && apt-get install imagemagick

或者整理容器副本并自己找

docker run -it --remove <mycontainernameorid> /bin/bash

--remove将确保在退出shell后删除容器。进入shell后,查找包二进制(或dpkg --list)

答案 1 :(得分:0)

你是对的,ONBUILD图像中的rails:onbuild指令将在Dockerfile的FROM指令之后执行。

我建议更改您的Dockerfile如下:

FROM ruby:2.2.0
RUN apt-get install imagemagick

# throw errors if Gemfile has been modified since Gemfile.lock
RUN bundle config --global frozen 1

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

RUN apt-get update && apt-get install -y nodejs --no-install-recommends && rm -rf /var/lib/apt/lists/*
RUN apt-get update && apt-get install -y mysql-client postgresql-client sqlite3 --no-install-recommends && rm -rf /var/lib/apt/lists/*


COPY Gemfile /usr/src/app/
COPY Gemfile.lock /usr/src/app/
RUN bundle install

COPY . /usr/src/app

EXPOSE 3000
CMD ["rails", "server"]

我根据rails:onbuild Dockerfile向下移动ONBUILD指令并删除ONBUILD风格。