我正在关注 https://testdriven.io/courses/tdd-fastapi/pytest-setup/ ,但是当第一次运行
docker-compose exec web python -m pytest
时,我得到
collected 212 items / 24 errors
而不是预期的0个项目.
简短的测试摘要信息显示在其他中
ERROR env/Lib/site-packages/h11/tests/test_against_stdlib_http.py
ERROR env/Lib/site-packages/h11/tests/test_connection.py
ERROR env/Lib/site-packages/h11/tests/test_events.py
ERROR env/Lib/site-packages/h11/tests/test_headers.py
所以我相信项目中的 env 文件夹正在复制到容器中,但是我的 .dockerignore 文件存在于包含以下四行的项目中:
env
.dockerignore
Dockerfile
Dockerfile.prod
我提交我目前的进展 GitHub Repo 如果你想看一下。
有人知道我做错了什么吗?
看起来问题不在于你的
.dockerignore
文件,而在于你的
docker-compose.yml
文件。你在挂载代码时使用了
volumes
,它将你的本地目录(包括
env
文件夹)覆盖了容器中的内容。
你有两个选择:
1. 排除
volumes
中的
env
文件夹:
你可以修改你的
docker-compose.yml
文件,明确排除
env
文件夹,像这样:
yaml
volumes:
- ./app:/app:ro
- /app/env # 排除 env 文件夹
这将确保你的本地
env
文件夹不会被挂载到容器中,并且 pytest 将使用容器内创建的虚拟环境。
2. 使用
.dockerignore
文件:
如果你想保留当前的
volumes
设置,你可以更新你的
.dockerignore
文件,使其在构建镜像时排除
env
文件夹。将
.dockerignore
文件的内容修改为:
env
.dockerignore
Dockerfile*
这将确保
env
文件夹不会包含在构建上下文中,并且不会复制到容器中。
选择任何一种方法都可以解决你的问题。建议使用第一种方法,因为它更明确地说明了你的意图,并且可以防止将来出现类似的问题。
标签:python,docker,pytest,fastapi From: 76598322