VSCode调试Golang单元测试时出现__debug_bin权限拒绝问题求助
检查调试二进制文件的实际权限
虽然已将*__debug_bin加入.gitignore,但要确认生成的__debug_bin文件本身权限。执行ls -l __debug_bin查看权限,若缺少可执行权限(无x标识),运行chmod +x __debug_bin添加执行权限。调整Golang临时目录权限
运行go env查看GOTMPDIR环境变量,默认临时目录可能存在权限限制。手动指定一个权限宽松的临时目录:export GOTMPDIR=/tmp/golang-debug mkdir -p $GOTMPDIR chmod 777 $GOTMPDIR完成后重新运行单元测试调试。
确认容器内有效用户上下文
尽管以root登录,部分容器可能通过su/sudo切换用户。执行whoami确认当前有效用户,同时用id查看用户组信息,确保对项目目录及调试文件拥有完整读写执行权限。调整Golang测试编译参数
尝试先编译测试二进制再手动运行,避免调试过程中的权限异常:go test -c ./your-package ./your-package.test或添加编译参数关闭优化:
go test -gcflags="all=-N -l",减少调试时的权限相关问题。排查宿主机挂载目录权限(若有挂载)
如果项目目录是从宿主机挂载到容器内,宿主机的文件权限会传递到容器。执行mount查看挂载信息,确认挂载时是否指定了正确的uid/gid参数,也可临时在宿主机将项目目录权限设为777测试。检查容器运行时安全限制
部分容器运行时可能启用AppArmor等安全规则,即使镜像无SELinux也需排查。执行docker inspect <container-id>查看SecurityOpt字段,若有相关限制,尝试启动容器时添加--security-opt apparmor:unconfined参数重新运行。
内容的提问来源于stack exchange,提问作者Matheus Saraiva

