docker - docker 容器中的程序仅在从交互式会话运行时才会写入卷
问题描述
我有一个包含 C++ 可执行文件的 docker 映像。可执行文件分析一些文件,并将结果输出到 .txt 文件。为了使它易于使用,我使用一个卷来传递图像并接收输出,例如docker run -t -v /input/files/dir:/app/input myimage myexecutable --input-dir /app/input
. 默认情况下,程序将输出 .txt 文件写入与输入文件相同的目录。
程序(不是我写的)打印输出 .txt 文件无法打开的错误。我认为这是一个卷权限问题或 selinux 问题,但是当我使用交互式会话运行相同的图像docker run -t -v /input/files/dir:/app/input myimage bash
并myexecutable --input-dir /app/input
从正在运行的容器中运行时,一切正常,并且输出 .txt 文件按预期写入卷。
从源搜索来看,C++ 程序似乎在运行fp = fopen(txt_fn, "w+");
,如果if(fp!=NULL)
它写入文件,则打印错误。
为什么文件指针打开仅在从 docker 容器中的交互式会话运行时才有效?
非常感谢任何帮助!
解决方案
看起来这可能只是使用旧版本 Docker 的问题,特别是版本 17.03.1-ce,因为该错误不会在最新版本上重现。叹。
推荐阅读
- javascript - 无法使用 innerHtml 定义 HTML 标记的 html 内容
- karate - 空手道 API 测试 - 当 Content-Type 为 application/jwt 时,API POST 请求无法发送正文
- multithreading - JavaFX MediaPlayer - 更新标签以显示线程/任务中的“当前时间”
- docker - 如何设置 nginx-proxy 以选择正确的容器而不需要端口号
- remote-access - 如何在serveo上运行本地项目
- python - 如何从python目录中打开一个随机文件?
- javascript - 如何将附加字段与 FormData 中的文件相关联
- java - Spring Data Mongo @Indexed 多次创建索引
- algorithm - 检查新边是否会使 DAG 循环
- powershell - Powershell 从远程主机获取变量值