如何让本地目录文件在运行的angr Docker容器中正常访问?
解决angr Docker容器无法访问本地挂载文件的问题
咱们一步步拆解你遇到的问题,核心是Docker卷挂载没正确生效,导致容器里找不到本地文件:
1. 先修正挂载命令的路径写法
你用的$pwd在sudo环境下可能出问题——因为sudo会重置部分环境变量,$pwd不一定指向你当前的用户目录。更可靠的写法是用$(pwd)或者直接写绝对路径:
sudo docker run -it --rm -v $(pwd):/local angr/angr
如果还是不行,试试用realpath确保路径是绝对的:
sudo docker run -it --rm -v $(realpath .):/local angr/angr
2. 先验证挂载是否生效
进入容器后别着急跑angr代码,先检查/local目录里有没有文件:
ls /local
如果看不到你本地的impossible_password.bin等文件,说明挂载确实失败了,回到第一步确认路径是否正确;如果能看到,那就是权限或者代码路径的问题。
3. 解决权限访问问题
本地目录的权限可能限制了容器内的angr用户读取。你可以二选一:
- 临时给本地目录加读权限:
chmod o+r . - 用你当前用户的UID/GID运行容器,确保权限完全匹配:
sudo docker run -it --rm -v $(pwd):/local --user $(id -u):$(id -g) angr/angr
4. 修正angr代码里的文件路径
确认挂载生效后,代码里的路径必须指向/local下的文件,而不是根目录:
import angr # 正确路径是/local/xxx,不是/xxx proj = angr.Project("/local/impossible_password.bin")
额外排查点
如果本地目录路径里有特殊字符(比如空格),要给路径加引号:
sudo docker run -it --rm -v "$(pwd)":/local angr/angr
内容的提问来源于stack exchange,提问作者partyTuringFriend
相关产品推荐
相关产品推荐

