首页 > 解决方案 > 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 bashmyexecutable --input-dir /app/input从正在运行的容器中运行时,一切正常,并且输出 .txt 文件按预期写入卷。

从源搜索来看,C++ 程序似乎在运行fp = fopen(txt_fn, "w+");,如果if(fp!=NULL)它写入文件,则打印错误。

为什么文件指针打开仅在从 docker 容器中的交互式会话运行时才有效?

非常感谢任何帮助!

标签: docker

解决方案


看起来这可能只是使用旧版本 Docker 的问题,特别是版本 17.03.1-ce,因为该错误不会在最新版本上重现。叹。


推荐阅读