Build 在主机上装载Docker卷,但生成文件;不变的;?

Build 在主机上装载Docker卷,但生成文件;不变的;?,build,docker,integration-testing,immutability,Build,Docker,Integration Testing,Immutability,我当前项目中的集成测试需要一段时间才能运行,如果能够使用Docker在本地运行这些测试,并在代码运行时继续使用这些测试,那就太好了。我现在的计划是创建一个执行以下操作的脚本: 将代码复制到/tmp 启动将此文件夹作为卷装载到主机上的Docker容器 在容器内运行测试 如果测试成功,请卸下容器 在开始创建此脚本之前,我想知道Docker是否支持从主机装载“不可变”卷,这样我就不需要手动将文件复制到/tmp?为了澄清,我希望将代码装载到Docker中,但我不希望在主机和容器之间共享文件夹。相反,我希

我当前项目中的集成测试需要一段时间才能运行,如果能够使用Docker在本地运行这些测试,并在代码运行时继续使用这些测试,那就太好了。我现在的计划是创建一个执行以下操作的脚本:

  • 将代码复制到
    /tmp
  • 启动将此文件夹作为卷装载到主机上的Docker容器
  • 在容器内运行测试
  • 如果测试成功,请卸下容器
  • 在开始创建此脚本之前,我想知道Docker是否支持从主机装载“不可变”卷,这样我就不需要手动将文件复制到
    /tmp
    ?为了澄清,我希望将代码装载到Docker中,但我不希望在主机和容器之间共享文件夹。相反,我希望主机中所做的更改保留在主机上,容器中所做的更改保留在容器中(有点像Clojure中数据结构中的“结构共享”)

    如果这不可能,那么我未来的脚本看起来是个好主意还是可以改进?

    您可以:

    注意末尾的
    ro
    。您也可以为读写指定
    rw
    ,这是默认值

    从主机装入卷后,可以将所需文件复制到容器中,例如
    cp-a/container testdir/writable testdir


    或者,您可以
    将主机中的文件添加到容器中,作为
    Dockerfile
    docker build

    的一部分,为什么需要卷?你每次都能用Docker's将代码添加到你的容器中吗?你是对的,我在写了这个问题后开始考虑这个问题。不过我想那会管用的。我能想到的唯一缺点是,我每次都需要在Docker文件中构建一个映像,而不是重复使用一个预构建的映像,然后只装载一个卷,我认为这样可以加快一点速度。这是真的。但是,如果Dockerfile不需要代码来构建映像的其余部分(即安装依赖项),则可以在Dockerfile的末尾使用
    COPY
    命令,以便缓存其他层。请注意,他希望主机上的更改保留在主机上,而容器中的更改保留在容器中。以只读方式装载会将主机更改放入容器中。同意,但问题的标题是“装载主机上的Docker卷,但使文件“不可变”?“所以我认为他不希望容器能够影响主机。这是真的,但我仍然希望容器能够修改文件。啊,您正在寻找docker缺少的一项功能:一步就可以将文件从主机复制到正在运行的容器中。我将用另外两种方法更新我的答案。
    docker run -v /tmp/host-randomtest:/container-testdir:ro