2015-09-15 2 views
13

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

Это 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?

+0

Так, скажите мне цель, что вам нужно установить Vim в контейнере ? обычно это не требуется. – BMW

+0

хорошо я часто вхожу в систему на терминал и должен смотреть файлы, если я исследую некоторые проблемы. –

+0

Вам нужен vim для просмотра файлов журналов? Затем вы должны сопоставить внешний том с '/ var/log/solr' или где бы они ни хранились. Плюс, что позволяет постоянные файлы журналов –

ответ

6

В 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

+0

нормально, я подозревал, что мне, возможно, придется скопировать файл изображения. Не беспокойтесь, спасибо за советы. –

31

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

USER root 

install/updates 

USER solr 
+0

Не могли бы вы объяснить, что это должно делать? – Michal

+0

Для меня просто введите эту строку в свой файл Dockerfile, который расширяет другие, и я решаю проблему прямо на установочном пакете: «USER root». Только то ! – darkomen

+1

Это должен быть принятый ответ. – Jeremy

Смежные вопросы