高级 Docker 和 Docker 文件 Volume/writeout 理解

High Level Docker and Dockerfile Volume/writeout understanding

我正在开发一个 Maven 项目,运行正在该项目中使用 Junit 进行测试。我是 docker 的新手,我正在尝试编写一个生成图像的 Dockerfile,该图像创建一个容器,当 运行 时,执行测试并输出 XML 结果 target/failsafe-reports(汇总 Junit 测试结果的 Maven 插件的输出文件夹)。我一直在尝试使用像 Dockerfile Reference and Manage Data in Containers 这样的链接。我的导师写了一行代码,使用 docker run -it --rm --name containerName -v "$PWD":/usr/src/tests -v /Users/theUser/.m2:/root/.m2 -w /usr/src/tests maven:3.5-alpine mvn clean verify.

实现了这一点

上面一行是在我项目的根目录下调用的(在pom和Dockerfile所在的位置)所以$PWD指的是我项目的根目录。

我的问题是这些工作中有多少可以在 Dockerfile 中自动完成?在我尝试使用和 运行 一个 Dockerfile 时,我无法在拥有当前 Dockerfile 时写出任何内容。

FROM maven:3.5-alpine

COPY ["./", "/usr/local/tests"]

VOLUME /usr/local/tests/target/failsafe-reports

ENTRYPOINT mvn -f /usr/local/tests/pom.xml verify

我用 docker build . -t imageName

并创建容器 docker run -it --rm --name test-container -v "$PWD":/usr/local/tests -v /Users/theUser/.m2:/root/.m2 imageName

这似乎 运行 我的测试,但没有将结果写入我的本地文件系统。我缺少 docker 和 Dockerfile 的什么概念?

尝试 运行宁只是:

docker run -d --name test-container -v $PWD:/usr/local/tests -v /Users/theUser/.m2:/root/.m2 imageName

然后检查主机的本地当前文件夹 (pwd) 是否已创建输出。

如果没有,则使用 shell 进入容器:

docker exec -it test-container sh

现在您应该在提示符下,尝试 运行 ls -l 或查看 find 输出是否在容器内创建。如果它没有生成输出文件,那应该会给你一些线索,告诉你要安装什么卷或修复进程本身。