【问题标题】:How do I add a package to an already existing image?如何将包添加到已经存在的图像中?
【发布时间】:2015-01-19 14:39:12
【问题描述】:

我有一个使用 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

现在,这可能是因为操作系统上缺少 imagemagic 包,即使我在 Dockerfile 中指定了它。所以我猜bundle install 命令是在我的RUN apt-get 命令发出之前发出的。
我的问题 - 使用这个基础镜像,有没有办法确保在捆绑之前安装 imagemagic?
我是否需要 fork 和更改基础镜像 Dockerfile 来实现这一点?

【问题讨论】:

  • 在 Dockerfile 中,在任何安装之前,必须以 apt-get update 开头。
  • 这对当前存在 ONBUILD 场景的情况没有帮助
  • 您可以修改容器,但不能修改图像。您可以创建另一个图像,然后执行FROM rails:onbuildv2

标签: ruby-on-rails imagemagick docker


【解决方案1】:

你是对的,来自rails:onbuild 镜像的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 风格制作的。

【讨论】:

    【解决方案2】:

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

    apt-get update && apt-get install imagemagick
    

    或者复制一个容器并自己寻找

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

    --remove 将确保在您退出 shell 后删除容器。在 shell 中查找软件包二进制文件(或 dpkg --list)

    【讨论】:

    • 问题是,鉴于我上面的 Dockerfile,如何在执行“FROM”Dockerfile 之前执行这个 apt-get 命令
    • 你不能。要么自己动手,要么在安装 pre-reqs 后重新捆绑。
    猜你喜欢
    • 2016-04-10
    • 1970-01-01
    • 2021-06-09
    • 2021-12-07
    • 2011-03-04
    • 1970-01-01
    • 2011-11-08
    • 2022-01-03
    • 1970-01-01
    相关资源
    最近更新 更多