【问题标题】:Modify the Docker image and save it for not loose the content when building the container again. How?修改 Docker 镜像并保存,以免再次构建容器时丢失内容。如何?
【发布时间】:2021-07-15 00:40:06
【问题描述】:

您好,我需要在构建后修改 Autoware_AI 存储库中的 docker 映像。问题是:

A) 我构建运行 .sh 文件的映像:

cd $WORKING_DIRECTORY/docker/generic
./run.sh -t 1.14.0

具体来自 Autoware:https://www.svlsimulator.com/docs/system-under-test/autoware-instructions/

B) 我修改了 Autoware 文件夹中包含的包内的脚本

C)当我退出容器,然后再次进入时,修改不再存在,当然,因为图像是从头开始从 Dockerfile 构建的......

为了找到解决方案,我尝试了 2 种不同的方法:

  1. 要修改容器并按此处所述保存:https://www.scalyr.com/blog/create-docker-image/

问题:使用其他终端时,尝试为 Autoware_AI 运行容器添加 .txt 文件,以修改容器,Autoware_AI 容器不显示为活动的(但它是)。当我尝试将文件复制到 Autoware_AI 时,只有其他容器可用:

  1. 提交对 Docker 映像的更改:https://phoenixnap.com/kb/how-to-commit-changes-to-docker-image

问题:连接到 Autoware_AI 服务器和运行 ros 包时出现问题。使用 .sh 构建原始 Docker 文件时不会出现此问题

这里更好地描述了我的问题的完整描述以及终端尝试的输出:

https://answers.ros.org/question/376512/fork-autoware_ai-repository-and-create-docker-image/?answer=376583#post-id-376583

https://get-help.robotigniteacademy.com/t/fork-autoware-ai-repository-and-create-docker-image/9533/4

我在分叉、更改 docker 图像方面是个新手。我不明白如何解决这个问题,找到一个解决方案来创建我的自定义 docker 映像并使其正常运行。

提前非常感谢!

【问题讨论】:

  • 您尝试修改的具体代码示例将非常有帮助。抽象地说,您需要创建一个 Dockerfile,该文件以 FROM 开始您尝试修改的映像,进行所需的更改,并生成一个新的派生映像。 docker commit 几乎从来都不是最佳实践(特别是如果基础映像发生更改,您没有记录如何重复修改)。
  • @DavidMaze 我的问题是 Dockerfile 调用一个包含多个 url 的 url 来下载 ROS 模块。为此,可以分叉 github 链接,但我需要更改 url:raw.githubusercontent.com/Autoware-AI/autoware.ai/1.14.0/... 内容。但是我不知道如何修改网页并将其保存到新的网页地址中。甚至可以使用扩展名从头开始创建网页:“autoware.ai.repos”。我知道如何在本地使用 .html 创建以使用浏览器打开。有什么建议吗?我把这个尝试放在下面的答案中......

标签: image docker containers commit ros


【解决方案1】:

正如 David Maze 所建议的那样,一种可行的方法是更改​​ Dockerfile,然后从中构建我的映像。这是个好主意。但在我的情况下,需要额外的步骤,因为我有一个 build.sh 脚本,它调用不同的 Dockerfile 来构建映像,此外,这个 build.sh 文件还安装了一些 ROS 包和其他依赖项。

即使 build.sh 需要更改。对 Dockerfile 的修改有助于解决 90% 的问题。我的 Dockerfile 是:

enter image description here

而修改后的Dockerfile变成了:

enter image description here

要将修改后的 ROS 代码下载到我的映像中,而不是自动软件 repo ROS pkgs,我需要:

1 - 从此处复制 autoware.ai.repos 文件: https://raw.githubusercontent.com/Autoware-AI/autoware.ai/1.14.0/autoware.ai.repos 到我的 docker 本地文件夹 (docker/generic) 并使用 vcs import 命令解开它们,因为 Dockerfile 显示在上面...

2- 编辑autoware.ai.repos,以便将autoware.ai.repos中包含的一些存储库的地址更改为我的个人github:

我删除了这些行:

autoware/visualization:
    type: git
    url: https://github.com/Autoware-AI/visualization.git
    version: 1.14.0

并替换为:

autoware/visualization:
    type: git
    url: https://github.com/marcusvinicius178/visualization
    

之后我在这里按照案例 3 中的构建说明进行操作:https://github.com/Autoware-AI/autoware.ai/wiki/Generic-x86-Docker#run-an-autoware-docker-container

$ ./build.sh

$ ./run.sh -t 本地

我知道可能存在一种更专业的方式来处理 Docker 镜像,并在原来的基础上构建一个新的 Dockerfile。但我不是 Docker 方面的专家,也通过这种方式解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    • 1970-01-01
    • 2022-08-08
    相关资源
    最近更新 更多