如何将新包安装到非 root Docker 容器中?
How to install new packages into non-root Docker Container?
我正在尝试为 SOLR 扩展 docker 容器。我只想将 vim
安装到其中。但是当我 运行 构建 docker 时,它会抱怨我不是 root。
这是我正在扩展的 DockerFile:
https://github.com/makuk66/docker-solr/blob/master/5.3/Dockerfile
我的构建文件是这样的:
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
然后它输出这个:
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?
有什么方法可以将包安装到这个容器中吗?或者我需要从 makuk66 复制原始构建文件吗?
在Dockerfile#L24中,用户已经切换到solr
。因此,如果您使用 FROM
图像作为基础图像,您自己 Dockerfile
中的所有命令都是用户 solr
运行
您可以通过从头构建 Dockerfile 来修复它。
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"]
其次,构建时不要将代码复制到容器中,使用-v
选项会更灵活。
COPY home/ocscommerce /etc/solr/home
替换为docker run
命令-v home/ocscommerce:/etc/solr/home
切换到 root
用户,然后切换回原来的 solr
用户:
USER root
install/updates
USER solr
与之前的答案类似的建议 ,以 root 用户身份打开交互式 shell,然后使用 apt-get 安装您的软件包。
docker exec --user="root" -it <container_name> /bin/bash
安装包
apt-get install package
我在使用 bitnami spark 图像和 docker 带参数的 exec 命令时遇到了类似的错误 -u 对我不起作用。我在图像文档 here.
中找到了答案
我相信您使用的是非根容器映像。阅读 docker 镜像提供商的文档以找到解决方案,了解如何将镜像用作根容器镜像。
我正在尝试为 SOLR 扩展 docker 容器。我只想将 vim
安装到其中。但是当我 运行 构建 docker 时,它会抱怨我不是 root。
这是我正在扩展的 DockerFile: https://github.com/makuk66/docker-solr/blob/master/5.3/Dockerfile
我的构建文件是这样的:
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
然后它输出这个:
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?
有什么方法可以将包安装到这个容器中吗?或者我需要从 makuk66 复制原始构建文件吗?
在Dockerfile#L24中,用户已经切换到solr
。因此,如果您使用 FROM
图像作为基础图像,您自己 Dockerfile
中的所有命令都是用户 solr
您可以通过从头构建 Dockerfile 来修复它。
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"]
其次,构建时不要将代码复制到容器中,使用-v
选项会更灵活。
COPY home/ocscommerce /etc/solr/home
替换为docker run
命令-v home/ocscommerce:/etc/solr/home
切换到 root
用户,然后切换回原来的 solr
用户:
USER root
install/updates
USER solr
与之前的答案类似的建议
docker exec --user="root" -it <container_name> /bin/bash
安装包
apt-get install package
我在使用 bitnami spark 图像和 docker 带参数的 exec 命令时遇到了类似的错误 -u 对我不起作用。我在图像文档 here.
中找到了答案我相信您使用的是非根容器映像。阅读 docker 镜像提供商的文档以找到解决方案,了解如何将镜像用作根容器镜像。