如何安装新的软件包到非根 Docker 容器?

我想为 SOLR 扩展一个码头集装箱。我只是想把 vim安装进去。但是当我运行 docker build 时,它会抱怨我不是 root 用户。

这是我正在扩展的 DockerFile: Https://github.com/makuk66/docker-solr/blob/master/5.3/dockerfile

我的构建文件是这样的:

FROM makuk66/docker-solr
MAINTAINER OCSCommerce Team <support@ocscommerce.com>
RUN apt-get update
RUN apt-get --assume-yes install vim
COPY home/ocscommerce /etc/solr/home

然后输出如下结果:

192.168.99.100
localhost:solr$ docker build -t ocscommerce/solr .
Sending build context to Docker daemon 39.66 MB
Step 0 : FROM makuk66/docker-solr
---> 92be2fe79f15
Step 1 : MAINTAINER OCSCommerce Team <support@ocscommerce.com>
---> Using cache
---> a3ac70e40324
Step 2 : RUN apt-get update
---> Running in c865716a2694
E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
E: Unable to lock directory /var/lib/apt/lists/
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?

有没有办法把软件包安装到这个容器里?或者我需要从 makuk66复制原始的构建文件?

66252 次浏览

Dockerfile # L24中,用户被切换到 solr。因此,如果在 FROM中使用图像作为基本图像,那么您自己的 Dockerfile中的所有命令都由用户 solr运行

您可以从一开始就构建 Dockerfile 来修复它。

FROM    java:openjdk-8-jre
MAINTAINER  Martijn Koster "mak-docker@greenhills.co.uk"


ENV SOLR_VERSION 5.3.0
ENV SOLR solr-$SOLR_VERSION
ENV SOLR_USER solr


RUN export DEBIAN_FRONTEND=noninteractive && \
apt-get update && \
apt-get -y install lsof && \
groupadd -r $SOLR_USER && \
useradd -r -g $SOLR_USER $SOLR_USER && \
mkdir -p /opt && \
wget -nv --output-document=/opt/$SOLR.tgz http://www.us.apache.org/dist/lucene/solr/$SOLR_VERSION/$SOLR.tgz && \
tar -C /opt --extract --file /opt/$SOLR.tgz && \
rm /opt/$SOLR.tgz && \
ln -s /opt/$SOLR /opt/solr && \
mkdir -p /opt/solr/server/solr/lib && \
chown -R $SOLR_USER:$SOLR_USER /opt/solr /opt/$SOLR


RUN apt-get --assume-yes install vim


EXPOSE 8983
WORKDIR /opt/solr
USER $SOLR_USER
CMD ["/bin/bash", "-c", "/opt/solr/bin/solr -f"]

其次,建造时不要将代码复制到容器中,使用 -v选项会更加灵活。

COPY home/ocscommerce /etc/solr/home

docker run命令取代 -v home/ocscommerce:/etc/solr/home

切换到 root用户,然后切换回原来的 solr用户:

USER root


install/updates


USER solr

与前一个答案 https://stackoverflow.com/a/37615312/2200690类似的建议是,作为 root 用户打开一个交互式 shell,然后使用 apt-get 安装包。

docker exec --user="root" -it <container_name> /bin/bash

安装软件包

apt-get install package

我有一个类似的错误时,使用 bitnami 火花图像和 docker exec 命令的参数-u 不适合我。我在图像文档 给你中找到了答案。

我相信您正在使用一个非根容器映像。阅读 docker 映像提供程序的文档,找到解决方案,了解如何将映像用作根容器映像。