如何将包添加到已存在的图像中?
How do I add a package to an already existing image?
我有一个使用 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 才能实现?
大多数包会清除缓存以节省大小。试试这个:
apt-get update && apt-get install imagemagick
或者假脱机复制容器并自己寻找
docker run -it --remove <mycontainernameorid> /bin/bash
--remove 将确保在您退出 shell 后删除容器。在 shell 中查找软件包二进制文件(或 dpkg --list)
你是对的,你的 Dockerfile 的 ONBUILD
instructions from the rails:onbuild image will be executed just after the 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
风味。
我有一个使用 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 才能实现?
大多数包会清除缓存以节省大小。试试这个:
apt-get update && apt-get install imagemagick
或者假脱机复制容器并自己寻找
docker run -it --remove <mycontainernameorid> /bin/bash
--remove 将确保在您退出 shell 后删除容器。在 shell 中查找软件包二进制文件(或 dpkg --list)
你是对的,你的 Dockerfile 的 ONBUILD
instructions from the rails:onbuild image will be executed just after the 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
风味。