Serverless部署出现无效跨设备链接错误,求排查原因
问题
本地安装sendgrid包后运行正常,但执行serverless deploy时失败,报错信息如下:
ERROR: Exception: Traceback (most recent call last): File "/var/lang/lib/python3.8/shutil.py", line 791, in move os.rename(src, real_dst) OSError: [Errno 18] Invalid cross-device link: '/tmp/pip-target-i40hnhmr/lib/python/jmespath-1.0.1.dist-info' -> '/var/task/jmespath-1.0.1.dist-info' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/var/lang/lib/python3.8/site-packages/pip/_internal/cli/base_command.py", line 160, in exc_logging_wrapper status = run_func(*args) File "/var/lang/lib/python3.8/site-packages/pip/_internal/cli/req_command.py", line 247, in wrapper return func(self, options, args) File "/var/lang/lib/python3.8/site-packages/pip/_internal/commands/install.py", line 566, in run self._handle_target_dir( File "/var/lang/lib/python3.8/site-packages/pip/_internal/commands/install.py", line 625, in _handle_target_dir shutil.move(os.path.join(lib_dir, item), target_item_dir) File "/var/lang/lib/python3.8/shutil.py", line 807, in move copytree(src, real_dst, copy_function=copy_function, File "/var/lang/lib/python3.8/shutil.py", line 557, in copytree return _copytree(entries=entries, src=src, dst=dst, symlinks=symlinks, File "/var/lang/lib/python3.8/shutil.py", line 458, in _copytree os.makedirs(dst, exist_ok=dirs_exist_ok) File "/var/lang/lib/python3.8/os.py", line 223, in makedirs mkdir(name, mode) PermissionError: [Errno 13] Permission denied: '/var/task/jmespath-1.0.1.dist-info'
已尝试切换Docker文件共享模式(VirtioFS/osxfs Legacy)、删除Docker镜像及~/Library/Caches/serverless-python-requirements/缓存,执行sudo serverless deploy/sudo serverless package仍报错,求问题原因。
问题原因
- 跨设备移动+权限限制双重冲突:
serverless-python-requirements插件在Docker容器内安装依赖时,先尝试用os.rename把/tmp(容器临时文件系统)下的依赖目录移到/var/task(挂载的本地项目目录),但这两个路径属于不同设备,触发Invalid cross-device link错误;随后shutil自动降级为复制操作,但容器内非root用户对挂载的/var/task目录没有足够写入权限,导致最终的PermissionError。 - sudo权限未同步到容器内:本地执行
sudo serverless时,仅提升了本地进程的权限,但Docker容器内仍以默认的非root用户运行,无法获得挂载目录的写入权限,sudo操作无效。 - 容器内残留缓存未彻底清理:仅删除本地缓存和镜像可能不够,容器内的临时文件或旧权限配置未被完全清除,导致重复触发相同错误。
内容的提问来源于stack exchange,提问作者Griffin Staples
相关产品推荐
相关产品推荐

