在正在运行的Docker容器中安装软件包

时间:2020-07-22 05:29:15

标签: docker dockerfile apt

我一直在使用docker容器来构建Chrome浏览器(在Debian 10上为Android构建)。我已经创建了一个Dockerfile,其中包含我需要的大多数软件包。

现在,在构建并运行容器之后,我遵循instructions,它要求我执行安装脚本(./build/install-build-deps-android.sh)。在此脚本中,执行了多个apt安装命令。

我现在的问题是,有没有一种方法可以在不重建容器的情况下安装这些软件包?下载和构建花费了相当长的时间,而且每次需要新软件包时都重新构建容器似乎不太理想。执行安装脚本时出现的错误是:

./build/install-build-deps-android.sh: line 21: lsb_release: command not found

(我想将会有多个丢失的软件包)。而使用apt将给出:

root@677e294147dd:/android-build/chromium/src# apt install nginx
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package nginx

(以nginx为例安装)。

非常感谢您提供任何提示,因为我只能找到使用Dockerfile安装软件包的指南。

2 个答案:

答案 0 :(得分:1)

您可以使用docker commit:

  1. 启动容器sudo docker run IMAGE_NAME
  2. 使用bash访问容器:sudo docker exec -it CONTAINER_ID bash
  3. 在容器内安装所需的任何东西
  4. 退出容器的重击
  5. 提交更改:sudo docker commit CONTAINER_ID NEW_IMAGE_NAME

如果您现在运行docker images,则会在本地图像下看到NEW_IMAGE_NAME

下次,启动docker容器时,请使用刚刚创建的新docker映像:
sudo docker run **NEW_IMAGE_NAME**-这将包括您的其他安装。

根据以下教程进行解答:How to commit changes to docker image

答案 1 :(得分:0)

感谢@adnanmuttaleb和@David Maze(不幸的是,他们只回答了,所以我不能接受他们的回答)。

我所做的是编辑Dockerfile进行以后的任何更新(已经发生),并使用exec命令从容器外部安装所需的依赖项。还记得

apt update

否则,您将找不到任何东西...