it-swarm.com.de

Wie installiere ich neue Pakete in einen Docker Container, der kein Root ist?

Ich versuche, einen Docker-Container für SOLR zu erweitern. Ich möchte nur vim darin installieren. Aber wenn ich den Docker-Build ausführen lasse, beschwert er sich, dass ich nicht root bin.

Dies ist die Docker-Datei, die ich erweitere: https://github.com/makuk66/docker-solr/blob/master/5.3/Dockerfile

Und meine Build-Datei lautet:

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

Dann gibt es das aus:

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?

Gibt es eine Möglichkeit, ein Paket in diesen Container zu installieren? Oder müsste ich die Original-Build-Datei von makuk66 kopieren?

27
Richard G

In der Dockerfile # L24 wurde der Benutzer auf solr umgestellt. Wenn Sie also das Bild als Basisbild mit FROM verwenden, werden alle Befehle in Ihrer eigenen Dockerfile vom Benutzer ausgeführt. solr

Sie können das Problem beheben, indem Sie die Dockerfile von Anfang an erstellen. 

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"]

Zweitens: Kopieren Sie die Codes beim Erstellen nicht in den Container. Die -v-Option wird flexibler.

COPY home/ocscommerce /etc/solr/home

Ersetzen durch docker run Befehl -v home/ocscommerce:/etc/solr/home

7
BMW

Wechseln Sie zum Benutzer root und wechseln Sie dann wieder zum ursprünglichen Benutzer solr:

USER root

install/updates

USER solr
54
user1338771

Ähnliche Empfehlung zur vorherigen Antwort https://stackoverflow.com/a/37615312/2200690 , öffnen Sie eine interaktive Shell als Root-Benutzer und installieren Sie dann Ihre Pakete mit apt-get.

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

installieren Sie das Paket

apt-get install package
0
Suketu Bhuta