首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dockerfile和Docker运行-w / workdir

Dockerfile和Docker运行-w / workdir
EN

Stack Overflow用户
提问于 2020-04-23 00:02:26
回答 1查看 2.8K关注 0票数 0

让我们以示例python dockerfile为例。

代码语言:javascript
复制
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

代码语言:javascript
复制
[tool:pytest]
addopts =
    --junitxml=results/unit-tests.xml
EN

回答 1

Stack Overflow用户

发布于 2020-04-23 06:10:51

在您给出的示例中,您不应该需要-v-w选项。

Dockerfile文件中的各种选项提供了可以在docker run时覆盖的默认值。例如,Dockerfile文件中的CMD将被docker run命令中镜像名称后面的任何内容覆盖。(...and最好在better文件中指定它,而不是必须在每次docker run调用时手动指定它。)

具体来说,对于您的问题,WORKDIR会影响后续RUNCOPY命令的当前目录,但它还会在容器运行时指定默认目录;如果没有docker run -w选项,它将使用该WORKDIR。将-w指定为与最终图像WORKDIR相同的目录不会有任何效果。

您还可以将代码COPY到Dockerfile文件中的映像中(这很好)。您不需要docker run -v选项来在运行时覆盖该代码。

更具体地说,查看pytest,它通常不会将内容写出到文件系统。如果您正在使用诸如JUnit XML或代码覆盖率报告之类的功能,则可以将其设置为在您的应用程序目录之外的其他位置写出这些内容:

代码语言:javascript
复制
docker run --rm \
  -v $PWD/reports:/reports \
  mydocker:1.0 \
  pytest --cov=myapp --cov-report=html:/reports/coverage.html tests
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61369657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档