让我们以示例python dockerfile为例。
FROM python:3
WORKDIR /project
COPY . /project然后在该容器中运行用于运行测试的run命令:
docker run --rm -v$(CWD):/project -w/project mydocker:1.0 pytest tests/
我们在dockerfile和run中声明WORKDIR。
我这么说对吗?
dockerfile文件中的WORKDIR是Dockerfile文件中的后续命令运行的目录吗?但这不会影响我们何时运行docker run命令?
相反,我们需要传入-w/project来让pytest在/projects目录中运行,很好地让pytest在/projects中查找rests目录。
我的setup.cfg
[tool:pytest]
addopts =
--junitxml=results/unit-tests.xml发布于 2020-04-23 06:10:51
在您给出的示例中,您不应该需要-v或-w选项。
Dockerfile文件中的各种选项提供了可以在docker run时覆盖的默认值。例如,Dockerfile文件中的CMD将被docker run命令中镜像名称后面的任何内容覆盖。(...and最好在better文件中指定它,而不是必须在每次docker run调用时手动指定它。)
具体来说,对于您的问题,WORKDIR会影响后续RUN和COPY命令的当前目录,但它还会在容器运行时指定默认目录;如果没有docker run -w选项,它将使用该WORKDIR。将-w指定为与最终图像WORKDIR相同的目录不会有任何效果。
您还可以将代码COPY到Dockerfile文件中的映像中(这很好)。您不需要docker run -v选项来在运行时覆盖该代码。
更具体地说,查看pytest,它通常不会将内容写出到文件系统。如果您正在使用诸如JUnit XML或代码覆盖率报告之类的功能,则可以将其设置为在您的应用程序目录之外的其他位置写出这些内容:
docker run --rm \
-v $PWD/reports:/reports \
mydocker:1.0 \
pytest --cov=myapp --cov-report=html:/reports/coverage.html testshttps://stackoverflow.com/questions/61369657
复制相似问题