gpt4 book ai didi

docker - 在 dockerfile 中处理用户并在其上安装软件包权限被拒绝

转载 作者:行者123 更新时间:2023-12-02 18:46:22 28 4
gpt4 key购买 nike

我想以/home/user 中的用户身份在 dokefile 上安装软件包。

FROM ubuntu:16.04

ENV user lg

RUN useradd -m -d /home/${user} ${user} \
&& chown -R ${user} /home/${user}

USER ${user}

WORKDIR /home/${user}

RUN apt-get update

RUN apt-get -y install curl

RUN apt-get -y install lsb-core

RUN apt-get -y install lsb

RUN apt-get -y upgrade -f

Docker 在执行 apt-get update 时抛出错误

E: List directory /var/lib/apt/lists/partial is missing. - Acquire (13: Permission denied) The command '/bin/sh -c apt-get update' returned a non-zero code: 100



谢谢 :)

最佳答案

这是因为您的lg用户根本没有必要的权限。在这种情况下,ubuntu 是否被 docker 化并不重要。就像在任何其他 Linux 发行版中一样 - 您需要权限才能执行某些操作。一个例子:如果你想在你的本地系统上创建一个新用户,我打赌命令 apt-get install X会引发完全相同的错误,不是吗?

为了安装任何东西,您需要 sudo以 root 身份为此用户进行身份验证。这可以像这样实现:

FROM ubuntu:16.04

RUN apt-get update && \
apt-get -y install sudo

ENV user lg

RUN useradd -m -d /home/${user} ${user} && \
chown -R ${user} /home/${user} && \
adduser ${user} sudo && \
echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers

USER ${user}

WORKDIR /home/${user}

RUN sudo apt-get -y install curl && \
sudo apt-get -y install lsb-core && \
sudo apt-get -y install lsb && \
sudo apt-get -y upgrade -f

一点解释:
  • 首先,您需要安装 sudo 包
  • 将您的用户添加到 sudo
  • 而且您还需要将 NOPASSWD 添加到 sudoers 文件中(我已经为 ALL 完成了它,但您可以轻松地为特定用户设置它)。没有这个,你会遇到以下错误:sudo: no tty present and no askpass program specified
  • 现在你可以用这个用户安装东西了

  • 还请尝试避免多次使用相同的 Dockerfile 指令(在您的情况下,您有多余的 4x RUN)。在以后的构建镜像中,每条指令都是一个单独的层。这是已知的 Dockerfile best practice .

    Minimize the number of layers In older versions of Docker, it was important that you minimized the number of layers in your images to ensure they were performant. The following features were added to reduce this limitation:

    In Docker 1.10 and higher, only the instructions RUN, COPY, ADD create layers. Other instructions create temporary intermediate images, and do not directly increase the size of the build.

    关于docker - 在 dockerfile 中处理用户并在其上安装软件包权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53433486/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com