Windows 11下使用Podman复制文件至容器时遇路径错误求助
在Windows 11 Podman中执行
podman cp复制文件到SQL Server容器报错的排查与解决 我在Windows 11主机上用Podman运行了SQL Server容器,尝试用以下命令把本地的SQL脚本复制到容器内:
podman cp .\baseline.sql mssql-server-1:/tmp/baseline.sql
但收到错误提示:
error rewriting "c:....\baseline.sql" to be relative to "/": expected root directory to be an absolute path, got "/"
已经确认源和目标路径本身是正确的(修改路径时Podman会返回路径不存在的正常报错),以下是实测有效的排查思路和解决方案:
排查与解决步骤
替换路径分隔符:Windows的反斜杠
\在Podman的跨环境路径解析中容易出问题,把源路径的反斜杠换成正斜杠/再尝试:podman cp ./baseline.sql mssql-server-1:/tmp/baseline.sql使用本地绝对路径:明确指定Windows下的完整绝对路径,避免相对路径的解析歧义:
podman cp C:\projects\sql-scripts\baseline.sql mssql-server-1:/tmp/baseline.sql如果路径包含空格,记得用双引号包裹:
podman cp "C:\projects\sql scripts\baseline.sql" mssql-server-1:/tmp/baseline.sql切换到WSL终端执行命令:如果你的Podman使用WSL2后端,直接在WSL的终端里执行
podman cp会更适配Linux容器的路径规则。WSL中Windows的C盘默认挂载在/mnt/c/,所以路径可以写成:podman cp /mnt/c/projects/sql-scripts/baseline.sql mssql-server-1:/tmp/baseline.sql检查容器目标目录权限:先确认容器内的
/tmp目录是否有写入权限,进入容器查看:podman exec -it mssql-server-1 ls -ld /tmp如果权限不足,先创建一个权限开放的目录再复制:
podman exec -it mssql-server-1 mkdir -p /tmp/sql-scripts && chmod 777 /tmp/sql-scripts podman cp ./baseline.sql mssql-server-1:/tmp/sql-scripts/baseline.sql替代方案:用卷挂载传递文件:如果
podman cp始终无法正常工作,可以直接把本地脚本目录挂载到容器内:- 若容器未启动,启动时添加挂载参数:
podman run -d -p 1433:1433 -v C:\projects\sql-scripts:/mnt/sql-scripts -e ACCEPT_EULA=Y -e SA_PASSWORD=YourStrong@Passw0rd mcr.microsoft.com/mssql/server:latest - 容器启动后,本地脚本会直接出现在容器的
/mnt/sql-scripts目录下,无需额外复制操作。
- 若容器未启动,启动时添加挂载参数:
内容的提问来源于stack exchange,提问作者MiguelSlv
相关产品推荐
相关产品推荐

