如何将新软件包安装到非 root Docker 容器中?

新手上路,请多包涵

我正在尝试为 SOLR 扩展一个 docker 容器。我只想在其中安装 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 复制原始构建文件?

原文由 Richard G 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 428
2 个回答

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

原文由 BMW 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

 USER root

install/updates

USER solr

原文由 user1338771 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题