【问题标题】:Is it possible to mount a directory while building from Dockerfile?从 Dockerfile 构建时是否可以挂载目录?
【发布时间】:2014-08-10 08:37:06
【问题描述】:

我正在尝试使用 Dockerfile 方法构建 Docker 映像。最小化图像大小和层数对于此特定应用程序非常重要。但是,安装所需的 rpm 相当大,我不想将其烘焙到映像中。似乎如果我在 Dockerfile 中使用 ADD 命令,则 rpm 会作为自己的层复制到映像中,并且在我使用完之后无法将其删除。为了解决这个问题,我们只是在交互模式下运行一个容器,使用 -v 卷挂载选项来共享包含 rpm 的文件夹,但实际上并没有将 rpm 复制到容器中。在使用 Dockerfiles 运行 docker build 命令时,有什么方法可以执行类似 -v 选项的操作吗?

【问题讨论】:

    标签: docker


    【解决方案1】:

    当您将 RPM 文件与 Dockerfile 放在同一文件夹中时,您可以从文件中访问它:

    YourFolder
    |---- Dockerfile
    |---- ToInstall
          |---- rpm_1.rpm
          |---- rpm_2.rpm
    

    现在您可以在 Dockerfile 中运行命令:

    RUN rpm -i /ToInstall/rpm_1.rpm
    

    【讨论】:

    • 嗯,我试过这个并认为它有效,但事实证明我正在运行的 yum 命令实际上只是默默地失败了,因为它甚至没有看到我的 rpm 文件。我也尝试过 RUN ls,但它没有在任何地方列出我的构建上下文文件
    【解决方案2】:

    同事想出的方法是使用docker rundocker commit

    docker run --name=$name --volume=$PWD/ToInstall/:/scratch --workdir=/scratch centos /scratch/install-script.sh
    echo Status is $(docker wait $name)
    echo
    docker commit $name myname-base
    docker rm -f $name
    

    install-script.sh 类似于:

    set -eux
    rpm -i myrpm1.rpm
    rpm -i myrpm2.rpm
    
    rm -rf /something-else-you-want-removed-from-layer
    

    Ciao!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 2021-06-20
      • 1970-01-01
      相关资源
      最近更新 更多