2015-09-15 20 views
13

Sto tentando di estendere un contenitore finestra mobile per SOLR. Voglio solo installare vim in esso. Ma quando eseguo il docker build si lamenta che non sono root.Come installare nuovi pacchetti nel contenitore Docker non root?

Questa è la DockerFile che sto estensione: https://github.com/makuk66/docker-solr/blob/master/5.3/Dockerfile

E il mio file di configurazione è questo:

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 

Poi Risulterà:

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? 

C'è un modo installare un pacchetto in questo contenitore? O dovrei copiare il file di build originale da makuk66?

+0

Allora, dimmi lo scopo che è necessario installare vim nel container ? normalmente non è richiesto. – BMW

+0

bene Accedo spesso al terminale e ho bisogno di guardare i file se sto indagando su qualche problema. –

+0

Avete bisogno di guardare i file di registro? Quindi devi mappare un volume esterno a '/ var/log/solr' o ovunque siano memorizzati. Inoltre, che consente file di registro persistenti –

risposta

6

Nel Dockerfile#L24, l'utente è passato a solr. Quindi, se si utilizza l'immagine come immagine di base con, tutti i comandi nel proprio Dockerfile sono in esecuzione dall'utente solr

È possibile risolvere il problema creando il file Docker dall'inizio.

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

In secondo luogo, non copiare i codici per il contenitore quando si costruisce, utilizzare -v opzione sarà più flessibile.

COPY home/ocscommerce /etc/solr/home 

Sostituire con docker run comando -v home/ocscommerce:/etc/solr/home

+0

ok, ho il sospetto che potrebbe essere necessario copiare il file di immagine. Nessun problema grazie per i suggerimenti. –

31

Passa per l'utente root, quindi tornare all'utente originale solr:

USER root 

install/updates 

USER solr 
+0

Ti dispiacerebbe spiegare cosa dovrebbe fare? – Michal

+0

Per me basta inserire questa riga nel mio Dockerfile che estende altri e risolvo il problema proprio sul pacchetto di installazione: 'USER root'. Solo quello ! – darkomen

+1

Questa dovrebbe essere la risposta accettata. – Jeremy

Problemi correlati