rm:无法删除‘/OUTPUTS/*’:没有此文件或目录

rm:无法删除‘/OUTPUTS/*’:没有此文件或目录

我正在尝试在 VirtualBox 上运行 ubuntu 上的 docker 映像。 repo 指令非常简单:

export input_dir=/home/input_dir
sudo mkdir $input_dir
export output_dir=$input_dir/output
sudo docker run -it --rm -v $input_dir:/INPUTS/ -v $output_dir:/OUTPUTS masidocker/public:liver_attenuation_v3_0_3 /extra/run_deep_wholebody_dicom.sh

但是当我尝试在笔记本电脑上运行它时,它给出了以下错误:

rm: cannot remove '/OUTPUTS/*': No such file or directory

尽管有这个错误,docker 仍继续运行

Compression will be faster with /usr/local/bin/pigz
Chris Rorden's dcm2niiX version v1.0.20170624 (OpenJPEG build) GCC4.8.4 (64-bit Linux)
Found 119 DICOM image(s)
Convert 119 DICOM as /OUTPUTS/NIFTI_raw/INPUTS_Recon_2__ABDOMEN_20090327103908_3
Conversion required 2.805481 seconds

但它无法将任何实际结果写入输出文件夹。我正在尝试弄清楚为什么会发生此错误以及如何解决它。谢谢!

答案1

运行后,docker run -it --rm masidocker/public:liver_attenuation_v3_0_3 bash我发现该/extra/run_deep_wholebody_dicom.sh脚本除其他命令外,还调用了一个/extra/bash1.sh启动脚本:

#!/bin/bash
start=$(date +%s.%N)
# dicom to nifty
rm -r /OUTPUTS/*

...并继续。正是这个rm -r /OUTPUTS/*命令产生了错误,因为此时 /OUTPUTS/ 目录是空的。

至于修复它,我认为最好的解决方案是要求上游图像所有者将代码更改/extra/bash1.sh为:

...
rm -rf /OUTPUTS/*
...

最好的地方可能是Docker 仓库的问题页面

除此之外,您还可以将 stderr 放到 /dev/null 来运行图像:

sudo docker run -it --rm -v $input_dir:/INPUTS/ -v $output_dir:/OUTPUTS masidocker/public:liver_attenuation_v3_0_3 /extra/run_deep_wholebody_dicom.sh 2>/dev/null

...我只是将其添加2>/dev/null到现有命令的末尾docker run

另一种选择(感谢史蒂芬·基特提到它)是在执行脚本之前在该目录中创建一个牺牲文件:

touch $output_dir/tempfile && sudo docker run -it --rm -v $input_dir:/INPUTS/ -v $output_dir:/OUTPUTS masidocker/public:liver_attenuation_v3_0_3 /extra/run_deep_wholebody_dicom.sh

相关内容