如何在 Docker 镜像中安装 Python?

47

我想创建一个正确安装了seleniumchrome的docker镜像,因此我选择了一个具有这些属性的基础镜像。因此,Dockerfile的第一行如下所示:

FROM selenium/node-chrome:3.7.1-argon

接下来的命令是

RUN apt-get update

在创建Docker镜像时出现了以下错误:

Step 4/19 : RUN apt-get update
 ---> Running in af08ae07cbf3
Reading package lists...
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

如何在此 Docker 镜像中安装 Python

3个回答

59

RUN apt-get update

RUN apt-get install -y python3

如下提示:

Acquire (13: Permission denied)

我相信这是由于你的基础镜像引起的:

https://github.com/SeleniumHQ/docker-selenium/blob/master/NodeChrome/Dockerfile

正如你所看到的,它从默认用户上下文'root'切换到'seluser'。

你可以选择:

  1. 将此作为基础镜像的后果(即使用sudo)
  2. 切换回: USER root
  3. 或者考虑创建自己的docker镜像以避免首先进行交换

在Dockerfiles中尽可能避免使用sudo,因此最好选择选项#2或#3,而不是#1。

希望对你有所帮助。


1
是的,奇怪。我以前创建过 Docker 镜像,从来不需要 'root'... - Alex
唯一有意义的情况是您使用“USER”指令,否则我会认为容器应该是用户根,因此不需要使用sudo。 - mikey
我更新了我的答案以澄清,你正在继承的基础镜像中存在。 - mikey
1
有一点需要注意,这会安装Python 2。由于我看到你正在使用seleniumchrome进行操作,你可能想要安装Python 3才能使其正常工作。 - Aniruddha Pandey
@Ugur_Kazdal提出了一个编辑建议,添加-y并删除sudo,因为sudo不应该出现在Dockerfile中。我同意这两点,但是,在这种情况下使用sudo虽然不好的做法,但是是解决问题的合法方法。我在我的回复末尾提出了一个更好的替代方案,以避免完全使用sudo,这是更可取的。我将进行更新以反映-y - 感谢您的反馈,希望我的解释有意义。 - mikey
显示剩余2条评论

13

注意: 下面的命令可能需要 root/administrative 权限。

  1. 下载 Docker 镜像 docker pull ubuntu
  2. 启动交互式容器 docker run -it ubuntu /bin/bash

注意: 如果默认情况下您没有作为 root 用户登录到容器中,您需要提升权限或在下面列出的命令前使用sudo

  1. 更新容器实例 apt-get update
  2. 安装 Python 2.7 apt-get install python2
  3. 安装 Python 3.x apt-get install python3

2
当你执行 apt-get install python 命令时,你安装的是哪个版本? - KansaiRobot
@KansaiRobot 看起来 apt-get install python 以前用于安装 Python 2,但现在已被删除,以迫使用户更加明确:Package python is not available, but is referred to by another package. [...] However the following packages replace it: [...] python2 [...] E: Package 'python' has no installation candidate。其中 [...] 是我删除的不必要的文本。 - Matt Popovich

3
首先,您想要以root身份登录:
sudo docker exec -u root -it 88d53df8fd19 /bin/bash

一旦你到那里,你将成为root用户,并且可以毫无问题地运行命令。
在容器内运行以下命令以安装Python。
apt update
apt-get install python3.6

问题是关于如何创建Docker镜像。您的命令可用于登录运行中的容器并修改容器,而不是镜像。 - Sky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接