ruby-on-rails - 如何将程序包添加到现有图像?

标签 ruby-on-rails imagemagick docker

我有一个RoR应用程序,该应用程序使用Gemfile中指定的imagemagick。我正在使用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

现在,这可能是因为即使我在Dockerfile中指定了imagemagic软件包,OS上也没有它。因此,我猜想bundle install命令是在发出RUN apt-get命令之前发出的。
我的问题-使用此基本镜像,是否可以确保在 bundle 之前已安装imagemagic?
我是否需要派生并更改基本镜像Dockerfile来实现?

最佳答案

没错, 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风格制作的。

关于ruby-on-rails - 如何将程序包添加到现有图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28027108/

相关文章:

sql - rails eager load has_many 通过连接表

ruby-on-rails - OAuth2 和 Omniauth 的区别

resize - 使用 Mogrify 执行调整大小和填充 Canvas

php - 使用 imagemagick 更快地检测图像中几个最亮点的方法?

docker - docker 客户端必须运行提升才能连接

git - 仅复制 Dockerfile 中的 Git 跟踪文件

ruby-on-rails - ActiveRecord 模型 'type' 多态关联列包括关联模型的命名空间

ruby-on-rails - rails - Elasticsearch 完成建议器和搜索 API

linux - ImageMagick -liquid-rescale 选项错误

docker - 如何等待Docker容器被删除