我正在尝试为我的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运行时创建失败:container_linux.go:348:启动容器进程导致“ exec:\” sudo \”:在$ PATH中找不到可执行文件”:未知。
并且没有sudo:
E:无法打开锁文件/ var / lib / dpkg / lock-frontend-打开(13:权限被拒绝)
E:无法获取dpkg前端锁(/ var / lib / dpkg / lock-frontend),您是root吗?
答案 0 :(得分:1)
有3个原因,我认为您应该重新考虑使用Docker,并确保充分利用容器。
您有一个名为...-node-10
的图片。您不需要特定节点的特定图像。它们都应在同一映像上运行,并在必要的范围内在运行时进行配置(这应保持在最低限度,通常应采用发现或动态配置之类的方法)。如果10
是版本,则应使用标签对其进行版本控制,而不是图像ID本身。
有一个有效的用例,用于通过exec
一次性执行正在运行的容器中的安装以进行一次性软件包安装(知道安装将在容器停止时消失),但是{ {1}}对我来说真的没有意义。正如@DavidMaze在问题注释中指出的那样,应该被安装的安装应该始终是Dockerfile的一部分。如果要将软件包安装到长期存在的容器中,请不要这样做。使用docker的人们遇到的最糟糕的事情是,他们试图将容器视为长期存在的虚拟机,当他们应将其视为保持最小状态的短暂运行时环境时,它们基本上是不可变的(因此很容易他们的映像包含所有安装时相关性,并将所有长期数据存储在单独的docker卷上(希望可以对其进行备份)。
您可能会在Dockerfile中将用户配置为以USER身份运行应用程序,但是您尝试运行特权命令而不将USER设置为其他用户。然后,您尝试运行docker run ... apt-get install
。但是sudo
在容器的上下文中没有多大意义,并且通常没有安装(如果安装了,这意味着您必须以某种方式将用户设置为sudo,所以不会)让您的生活更轻松,更艰难)。您可以sudo
在docker exec
时将用户设置为root
。但是您实际上并不需要这样做-所有设置都应在Dockerfile中完成,并且应该附带一个新的dockerfile来更改版本。
我本人是docker的非常重的用户,并且在其中构建几乎所有应用程序,因为它极大地简化了表达其运行时要求的过程,所以我想我是从这里的经验出发。如果您的容器不是一成不变的,那么您将不会获得docker的任何价值。您将遇到与没有容器时一样的问题,但是管理工具更少。 Docker在运行时避免了大多数管理-充分利用这一点,不要与之抗争。