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?
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
Basculez vers l'utilisateur root
, puis revenez à l'utilisateur solr
d'origine:
USER root
install/updates
USER solr
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