【问题标题】:docker for toolkit documentation: `docker export` not including all layers?用于工具包文档的 docker:`docker export` 不包括所有层?
【发布时间】:2025-12-04 12:30:01
【问题描述】:

在放弃其他方法来正确记录我的R 分析环境以实现分析重现性之后,我开始着手将每个单独的分析包装到docker 容器中。 这是我的工作:

  1. rocker project拉取最新的rstudio容器:

    docker pull rocker/rstudio
    
  2. 创建特定于项目的副本

    docker run -d -p 8787:8787 rocker/rstudio # Produces baseID
    docker commit --message="Snapshot of current rocker/rstudio container" <baseID> rstudio_project.2018
    docker stop <baseID>
    
  3. 启动容器:

    docker run -d -p 8787:8787 -e ROOT=TRUE rstudio_project.2018 # produces ID
    
  4. 基于R(Studio)的项目分析...以sudo apt-get cleansudo rm -rf /tmp/*结束

  5. 导出 docker 镜像:

    docker export -o docker_rstudio_project.2018.tar <ID>
    xz docker_rstudio_project.2018.tar
    

从我的本地注册表中删除所有相关的容器/图像后,我尝试模拟对打包项目的重新访问,如下所示:

  1. 导入容器:

    docker import docker_rstudio_project.2018.tar.xz rstudio_project.2018.2
    
  2. (尝试)像原来一样启动容器:

    docker run -d -p 8787:8787 -e ROOT=TRUE rstudio_project.2018.2

然后我面临以下错误:

docker: Error response from daemon: No command specified.

我做错了什么?容器在哪里丢失(什么)关于默认启动什么的信息?

【问题讨论】:

    标签: r docker rstudio rstudio-server reproducible-research


    【解决方案1】:

    exportimport 命令只处理文件系统,而不是像运行什么命令这样的元数据。请改用saveload。另见https://github.com/moby/moby/issues/1826

    【讨论】:

    • 我明白了,但如果我理解正确,那将需要我 docker save 给定容器下的所有层,而不是能够将它们压缩成一个层(docker export 所做的,如果我理解正确)?所以我不能两全其美 - 压缩图像 + 元数据?
    • @balin 是的,docker save 多层图像保持多层。但它仍然只是您必须处理的一个存档文件。
    • 好的。我现在已经将我的安装转换为一个 docker 文件...使用--squash 构建然后使用docker save/docker load 应该让我远离层混乱(如果我理解正确的话)...