我正在尝试在 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