2015-09-15 13 views
13

Ich versuche, einen Andock-Container für SOLR zu erweitern. Ich möchte nur vim darin installieren. Aber wenn ich den Docker baue, beschwert er sich, dass ich nicht root bin.Wie installiere ich neue Pakete in nicht-root Docker Container?

Dies ist DockerFile, dass ich erstreckt: diese https://github.com/makuk66/docker-solr/blob/master/5.3/Dockerfile

Und meine Build-Datei ist:

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:

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 um ein Paket in diesem Container zu installieren? Oder müsste ich die Original-Build-Datei von makuk66 kopieren?

+0

Also, sagen Sie mir den Zweck, dass Sie vim im Behälter installieren ? normalerweise ist es nicht erforderlich. – BMW

+0

Nun, ich melde mich oft am Terminal an und muss mir Dateien ansehen, wenn ich ein Problem untersuche. –

+0

Sie benötigen vim, um sich Protokolldateien anzusehen? Dann sollten Sie ein externes Volume zu '/ var/log/solr' zuordnen oder wo auch immer sie gespeichert sind. Plus, das ermöglicht persistente Log-Dateien –

Antwort

6

In der Dockerfile#L24 wurde der Benutzer auf solr umgeschaltet. Also, wenn Sie das Bild als Basis-Image verwenden, um mit FROM, alle Befehle in Ihrem eigenen Dockerfile werden vom Benutzer ausgeführt wird solr

Sie können das Problem beheben, indem Sie den Dockerfile von Anfang an zu bauen.

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 nicht die Codes Container kopieren, wenn verwenden Aufbau -v Option wird flexibler.

COPY home/ocscommerce /etc/solr/home 

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

+0

ok, ich vermutete, dass ich die Image-Datei kopieren muss. Keine Sorge, danke für die Tipps. –

31

Wechseln Sie auf die root Benutzer, wechseln Sie dann wieder auf den ursprünglichen solr Benutzer:

USER root 

install/updates 

USER solr 
+0

Würde es Ihnen etwas ausmachen zu erklären, was das tun soll? – Michal

+0

Für mich einfach diese Zeile in meine Dockerfile eingeben, die andere erweitert und ich löse Problem direkt am Installationspaket: 'USER root'. Nur das ! – darkomen

+1

Dies sollte die akzeptierte Antwort sein. – Jeremy

Verwandte Themen