使用Docker运行Ensembl-VEP时出现“File does not exist”错误
解决Ensembl-VEP Docker容器找不到输入文件的问题
核心原因
你通过-v $HOME/vep_data:/data将本地目录挂载到容器的/data目录,但命令里指定的input/1000123_23191_0_0.g.vcf是容器内的相对路径,容器默认会在/opt/vep(VEP的默认工作目录)下查找该文件,而非挂载的/data目录,因此出现“文件不存在”的错误。
排查与修复步骤
1. 确认本地文件路径是否正确
先检查输入文件是否在挂载目录下:
ls -l $HOME/vep_data/input/1000123_23191_0_0.g.vcf
如果该命令返回文件不存在,需将input文件夹移动到$HOME/vep_data目录下,或调整挂载路径。
2. 修正VEP命令的输入路径
有两种可行方式:
- 方式一:使用容器内的绝对路径
将--input_file和--output_file参数改为挂载目录下的绝对路径,确保容器能正确访问本地文件:
sudo docker run -v $HOME/vep_data:/data ensemblorg/ensembl-vep \ vep --cache --offline --format vcf --vcf --force_overwrite \ --input_file /data/input/1000123_23191_0_0.g.vcf \ --output_file /data/output/my_output.vcf
- 方式二:指定容器工作目录为挂载目录
通过-w /data参数让容器在挂载的/data目录下执行命令,此时相对路径会直接指向本地的$HOME/vep_data:
sudo docker run -v $HOME/vep_data:/data -w /data ensemblorg/ensembl-vep \ vep --cache --offline --format vcf --vcf --force_overwrite \ --input_file input/1000123_23191_0_0.g.vcf \ --output_file output/my_output.vcf
3. 验证挂载是否正常
若仍报错,先运行测试容器查看挂载目录内容,确认文件存在:
sudo docker run -v $HOME/vep_data:/data ensemblorg/ensembl-vep ls -l /data
确认输出中可见input文件夹及目标文件后,再重新执行VEP命令。
4. 检查文件权限(可选)
若路径正确但仍无法访问,可能是容器内用户无读取权限,给本地文件添加其他用户读权限:
chmod o+r $HOME/vep_data/input/1000123_23191_0_0.g.vcf
内容的提问来源于stack exchange,提问作者random
相关产品推荐
相关产品推荐

