问题
I'm trying to extend a docker container for SOLR. I just want to install vim into it. But when I run the docker build it complains that I'm not root.
This is the DockerFile that I'm extending: https://github.com/makuk66/docker-solr/blob/master/5.3/Dockerfile
And my build file is this:
FROM makuk66/docker-solr
MAINTAINER OCSCommerce Team <support@ocscommerce.com>
RUN apt-get update
RUN apt-get --assume-yes install vim
COPY home/ocscommerce /etc/solr/home
Then it outputs this:
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 <support@ocscommerce.com>
---> 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?
Is there any way to install a package into this container? Or would I need to copy the original build file from makuk66?
回答1:
In the Dockerfile#L24, the user has been switched to solr. So if you use the image as base image with FROM, all commands in your own Dockerfile are running by the user solr
You can fix it by building the Dockerfile from beginning.
FROM java:openjdk-8-jre
MAINTAINER Martijn Koster "mak-docker@greenhills.co.uk"
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"]
Second, don't copy the codes to container when building, use -v option will be more flexible.
COPY home/ocscommerce /etc/solr/home
Replace with docker run command -v home/ocscommerce:/etc/solr/home
回答2:
Switch to the root user, then switch back to the original solr user:
USER root
install/updates
USER solr
回答3:
Similar suggestion to the previous answer https://stackoverflow.com/a/37615312/2200690, open an interactive shell as the root user and then install your packages using apt-get.
docker exec --user="root" -it <container_name> /bin/bash
install the package
apt-get install package
来源:https://stackoverflow.com/questions/32576928/how-to-install-new-packages-into-non-root-docker-container