无法在基于 apache/zeppelin:0.9.0 的 Docker 映像中安装软件包

Cannot install packages inside Docker image based of apache/zeppelin:0.9.0

我从 apache/zeppelin:0.9.0 基础映像创建了一个 Docker 文件,在我的 docker 映像中安装 jq

FROM apache/zeppelin:0.9.0

RUN apt-get update && apt-get install -y jq

当我使用 docker build . 构建此映像时,我收到以下错误消息:

[2/2] RUN apt-get update && apt-get install -y jq:

#5 0.257 Reading package lists...

#5 0.272 E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)

#5 0.272 E: Unable to lock directory /var/lib/apt/lists/

在我的 Docker 文件中使用 RUN sudo apt-get update && sudo apt-get install -y jq 时,我 运行 进入另一个错误,说缺少 sudo:

[2/2] RUN sudo apt-get update && sudo apt-get install -y jq:

#5 0.249 /bin/sh: 1: sudo: not found

我的问题是,在使用上述 Docker 基础图像时,如何 运行 apt-get

如果您查看 zeppelin Dockerfile here,您会发现在结尾附近有一个 USER 1000 语句。

当您尝试构建此映像时,您的构建步骤是 运行 作为不允许安装任何东西的用户。

要修复它,您需要在安装前切换到 root 用户,然后在完成后切换回用户 1000。像这样

FROM apache/zeppelin:0.9.0
USER root
RUN apt-get update && apt-get install -y jq
USER 1000