You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows10下Docker运行sqlc挂载卷异常、配置文件不存在问题求助

问题记录
  • 项目集成sqlc时运行Docker命令触发报错:Docker: Error parsing configuration files, file does not exist
  • 伴随数据卷挂载为空的异常:命令执行后Docker会自动创建多余空文件夹,实际生成的目录结构和教程预期不符
  • 运行环境:Windows10 + Docker Desktop,容器数据默认存储路径为\\wsl$\docker-desktop-data\data\docker\volumes
  • 已确认问题出在挂载配置环节,但查阅Docker官方文档未定位到具体修复方法
问题复现所用命令

当前bash终端执行的sqlc相关命令如下,第一条init命令可执行成功,但会额外生成空目录:

docker run --rm -v $(pwd)://src -w //src kjconroy/sqlc init
docker run --rm -v $(pwd)://src -w //src kjconroy/sqlc generate
现有Makefile配置
postgres:
    docker run --name postgreslatest -p 5432:5432 -e POSTGRES_USER=root -e POSTGRES_PASSWORD=secret -d postgres
createdb:
    docker exec -it postgreslatest createdb --username=root --owner=root simple_bank
dropdb:
    docker exec -it postgreslatest dropdb simple_bank
migrateup:
    migrate -path db/migration -database "postgresql://root:secret@localhost:5432/simple_bank?sslmode=disable" -verbose up
migratedown:
    migrate -path db/migration -database "postgresql://root:secret@localhost:5432/simple_bank?sslmode=disable" -verbose down

.PHONY: postgres createdb dropdb migrateup migratedown
根因说明

问题由Windows环境终端路径转义规则+命令路径写法错误共同导致:

  1. 命令中容器路径写为//src属于错误写法,多余的双斜杠会干扰Docker的路径解析逻辑
  2. Windows下Git Bash类终端会自动转换类Unix路径格式,直接写$(pwd)挂载当前目录时,路径会被转成带Windows盘符的格式,Docker无法识别为合法主机目录,就会自动创建一个空的匿名数据卷挂载到容器内,不会关联本地项目目录,容器内自然读不到sqlc的配置文件,同时会在本地生成多余空文件夹。
修复步骤
  1. 修正sqlc运行命令,去掉容器路径多余的前置双斜杠,同时给主机路径增加前置斜杠规避Git Bash的自动路径转义:
# Git Bash 环境执行用这个
docker run --rm -v /$(pwd):/src -w /src kjconroy/sqlc init
docker run --rm -v /$(pwd):/src -w /src kjconroy/sqlc generate

如果是PowerShell环境执行,将/$(pwd)替换为${PWD}即可,不需要额外加前置斜杠。
2. 清理之前错误挂载生成的冗余资源:

# 清理无用匿名卷
docker volume prune -f

手动删除项目目录下之前错误生成的空src文件夹。
3. 重新执行修正后的init命令,sqlc配置文件会直接生成在当前项目根目录,再执行generate命令即可正常读取配置生成代码,目录结构和教程预期完全一致。
4. Makefile适配:将sqlc相关命令加入现有Makefile时,使用Make内置的CURDIR变量获取当前目录,对应target写法如下,新增后记得把target名加到.PHONY声明中:

sqlcinit:
    docker run --rm -v /$(CURDIR):/src -w /src kjconroy/sqlc init
sqlcgen:
    docker run --rm -v /$(CURDIR):/src -w /src kjconroy/sqlc generate

内容的提问来源于stack exchange,提问作者Woden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 12:57:19