为docker容器安装python pip不起作用

为docker容器安装python pip不起作用,docker,pip,Docker,Pip,我正在尝试为docker容器配置python pip。但这给了我一个错误,我没有得到允许。在我使用sudo之后,它又给了我一个错误 我尝试使用sudo获得root权限。我还尝试了exec命令并运行 sudo docker container run davidrazd/discord-node-10 sudo apt-get install python-pip sudo docker container exec davidrazd/discord-node-10 sudo apt-get i

我正在尝试为docker容器配置python pip。但这给了我一个错误,我没有得到允许。在我使用sudo之后,它又给了我一个错误

我尝试使用sudo获得root权限。我还尝试了exec命令并运行

sudo docker container run davidrazd/discord-node-10 sudo apt-get install python-pip
sudo docker container exec davidrazd/discord-node-10 sudo apt-get install python-pip
docker:来自守护程序的错误响应:OCI运行时创建失败:容器\u linux。go:348:启动容器进程导致“exec:\“sudo\”:在$PATH中未找到可执行文件:未知

没有sudo:

E:无法打开锁文件/var/lib/dpkg/lock frontend-打开(13:权限被拒绝)

E:无法获取dpkg前端锁(/var/lib/dpkg/lock frontend),您是root用户吗


这里有三个原因,我认为你应该重新考虑使用Docker,确保你能最大限度地利用容器

  • 您有一个名为
    …-node-10
    的图像。您不应该需要特定节点的特定图像。它们都应该在同一个映像上运行,并在必要的程度上在运行时进行配置(这应该保持在最低限度,通常是发现或动态配置)。如果
    10
    是一个版本,则应该使用标记来对其进行版本设置,而不是图像ID本身

  • 通过
    exec
    在运行中的容器内一次性执行安装有一个有效的用例,用于一次性安装包(知道安装将在容器停止时消失),但
    docker run。。。apt get install对我来说真的没有意义。正如@DavidMaze在一条问题注释中指出的,应该始终将安装作为Dockerfile的一部分。如果您要将包安装到长寿命容器中,请不要,也不要。docker用户遇到的最糟糕的事情是,他们试图将容器视为长寿命虚拟机,而他们本应将容器视为维持最低状态的短暂运行时环境,这些环境本质上是不可变的(因此很容易被下一个版本所取代),他们的映像包含所有安装时依赖项,并将任何长期数据存储在单独的docker卷上(希望该卷本身已备份)

  • 您可能正在将应用程序中的某个用户配置为以Dockerfile中的用户身份运行,但您正在尝试在不将用户设置为其他用户的情况下运行特权命令。然后尝试运行
    sudo
    。但是
    sudo
    在容器的上下文中没有多大意义,并且通常没有安装(如果安装了,则意味着您必须以某种方式将用户设置为sudo,因此它不会让您的生活变得更轻松,只是更困难)。您可以使用
    docker exec-u root…
    将用户在
    docker exec
    时间设置为
    root
    。但是你不应该真的需要这样做-所有的设置都应该在Dockerfile中完成,你应该发布一个新的Dockerfile来更改版本


  • 我自己也是docker的忠实用户,在docker中构建了几乎所有的应用程序,因为它极大地简化了表达运行时需求的过程,所以我想我在这里是从经验的角度讲的。如果您的容器不是不变的,那么您将无法获得docker的任何价值;您将遇到与没有容器时相同的问题,但管理工具更少。Docker在运行时消除了大部分管理—利用这一点,不要与之抗争

    您通常不会在正在运行的容器中安装软件:一旦容器退出,软件就会丢失,您必须重复安装。将这样的安装步骤放在docker文件中,然后构建包含软件的自定义映像。如何修改docker映像?