web-dev-qa-db-fra.com

Comment installer de nouveaux packages dans un conteneur Docker non root?

J'essaye de prolonger un conteneur de docker pour SOLR. Je veux juste installer vim dedans. Mais lorsque je lance le docker, il se plaint de ne pas être root.

Voici le fichier Docker que je suis en train d’étendre: https://github.com/makuk66/docker-solr/blob/master/5.3/Dockerfile

Et mon fichier de construction est ceci:

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

Ensuite, il affiche ceci:

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?

Est-il possible d'installer un paquet dans ce conteneur? Ou aurais-je besoin de copier le fichier de construction d'origine à partir de makuk66?

27
Richard G

Dans Dockerfile # L24 , l'utilisateur a été basculé sur solr. Donc, si vous utilisez l'image comme image de base avec FROM, toutes les commandes de votre propre Dockerfile sont exécutées par l'utilisateur solr

Vous pouvez résoudre ce problème en construisant le fichier Dockerfile depuis le début. 

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

Deuxièmement, ne copiez pas les codes dans le conteneur lors de la construction, utilisez l'option -v sera plus flexible.

COPY home/ocscommerce /etc/solr/home

Remplacer par docker run commande -v home/ocscommerce:/etc/solr/home

7
BMW

Basculez vers l'utilisateur root, puis revenez à l'utilisateur solr d'origine:

USER root

install/updates

USER solr
54
user1338771

Idée similaire à la réponse précédente https://stackoverflow.com/a/37615312/2200690 , ouvrez un shell interactif en tant qu'utilisateur root, puis installez vos paquets avec apt-get.

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

installer le paquet

apt-get install package
0
Suketu Bhuta