How to install new packages into non-root Docker Container?

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

Switch to the root user, then switch back to the original solr user:

USER root

install/updates

USER solr

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

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