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环境终端路径转义规则+命令路径写法错误共同导致:
- 命令中容器路径写为
//src属于错误写法,多余的双斜杠会干扰Docker的路径解析逻辑 - Windows下Git Bash类终端会自动转换类Unix路径格式,直接写
$(pwd)挂载当前目录时,路径会被转成带Windows盘符的格式,Docker无法识别为合法主机目录,就会自动创建一个空的匿名数据卷挂载到容器内,不会关联本地项目目录,容器内自然读不到sqlc的配置文件,同时会在本地生成多余空文件夹。
修复步骤
- 修正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
相关产品推荐
相关产品推荐

