Подтвердить что ты не робот

Как установить новые пакеты в некорневой контейнер Docker?

Я пытаюсь расширить контейнер докеров для SOLR. Я просто хочу установить vim в него. Но когда я запускаю сборку докеров, он жалуется, что я не root.

Это DockerFile, который я расширяю: https://github.com/makuk66/docker-solr/blob/master/5.3/Dockerfile

И мой файл сборки:

FROM makuk66/docker-solr
MAINTAINER OCSCommerce Team <[email protected]>
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 <[email protected]>
 ---> 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?

4b9b3361

Ответ 1

В Dockerfile#L24 пользователь переключился на solr. Поэтому, если вы используете изображение как базовое изображение с FROM, все команды в вашем собственном Dockerfile выполняются пользователем solr

Вы можете исправить это, создав Dockerfile с самого начала.

FROM    java:openjdk-8-jre
MAINTAINER  Martijn Koster "[email protected]"

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

Ответ 2

Переключитесь на пользователя root, затем вернитесь к исходному пользователю solr:

USER root

install/updates

USER solr