首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Docker-in-Docker Pytest失败,带有临时路径

Docker-in-Docker Pytest失败,带有临时路径
EN

Stack Overflow用户
提问于 2020-10-10 20:24:35
回答 1查看 105关注 0票数 0

我们在容器中进行所有的开发,我们的一个应用程序在生产中通过docker-py管理docker。所以测试变成了docker-ception (docker in docker)。我们通过compose for development挂载主机docker.sock (即挂载docker-py直接使用的卷/var/run/docker.sock:/var/run/docker.sock )。

许多测试使用tmp_path pytest fixture (或库特定的临时路径),这些测试失败并出现一系列随机错误--主要是找不到文件、找不到模块等。

手动和在dev容器外运行相同的过程。

为什么要来?

EN

回答 1

Stack Overflow用户

发布于 2020-10-10 20:24:35

TLDR

在开发环境中,需要将/tmp文件夹挂载为卷。添加

代码语言:javascript
运行
复制
volumes:
  - /var/run/docker.sock:/var/run/docker.sock
  - /tmp:/tmp

使来自测试的临时资产可用于子容器。

长篇大论的回答

Docker-in-docker使用主机docker.sock将容器创建为同级容器,而不是嵌套子容器。这意味着来自parent->child的docker文件系统引用将不起作用,因为它们访问与主机相同的文件系统。

代码语言:javascript
运行
复制
               #### /tmp files in parent not accessible to child ####

# on host machine                    # dev-container                                           
/                                    /                                                    
|__/home/sven/Repos/dev              |_/app  # mounted to /home/sven/Repos/dev in host    
|__/tmp # sub-container looks here!  |_/tmp  # pytest creates tmp files here                                            
|__/lib                              |... etc
|... etc 

调试时

  • 记得检查子容器中文件的文件类型,看看它们是否实际挂载。Docker将为它在主机上找不到的每个文件创建空目录。因此,如果main.py没有实际挂载,容器中将会有一个main.py目录。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64293373

复制
相关文章

相似问题

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