docker容器中的程序只有在从交互式会话运行时才会写入卷



我有一个docker映像,其中包含一个C++可执行文件。可执行文件分析一些文件,并将结果输出到.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版本,因为该错误不会在最新版本上重现。叹气

最新更新