Docker卷中SQLite数据库的访问方法咨询(WSL Alpine环境)
Docker卷中SQLite数据库的访问方法咨询(WSL Alpine环境)
嘿,我来帮你搞定在WSL Alpine环境里访问Docker卷中SQLite数据库的问题~ 结合你的场景,给你几个实用的办法:
方法一:直接在运行的Docker容器内操作数据库
这是最直接的方式,毕竟数据库文件本来就在容器里:
- 先找到你的server服务容器的ID或名称,执行命令:
docker ps - 进入容器的shell环境(Alpine用sh而非bash):
docker exec -it <容器ID/名称> sh - 如果容器里没装sqlite3工具,先安装:
apk add sqlite - 切换到数据库文件所在的目录:
cd /usr/src/app/data - 启动sqlite3交互环境操作数据库,比如你的数据库文件是app.db的话:
sqlite3 app.db
之后就能用SQL命令操作了,比如输入.tables查看所有表,或者执行SELECT * FROM your_table;查询数据。
方法二:将Docker卷内的数据库文件复制到WSL本地
要是你想在WSL系统里直接操作,可以把卷里的文件复制出来:
- 先在WSL里创建一个用来存放数据库文件的目录:
mkdir -p ~/docker-db-files - 把容器内的数据库目录复制到WSL本地:
docker cp <容器ID/名称>:/usr/src/app/data/ ~/docker-db-files/ - 给WSL安装sqlite3工具:
apk add sqlite - 进入复制后的目录操作数据库:
cd ~/docker-db-files/datasqlite3 <你的数据库文件名>.db
方法三:修改docker-compose实现WSL与容器的实时共享
如果想要两边都能实时访问数据库文件,可以在docker-compose.yaml里添加一个本地挂载:
打开你的compose.yaml,找到server服务的volumes配置,修改成这样:
services: server: build: context: . environment: NODE_ENV: production EMAIL_USER: ${EMAIL_USER} EMAIL_PASSWORD: ${EMAIL_PASSWORD} USERNAME1: ${USERNAME1} USERNAME2: ${USERNAME2} USERPASSWORD: ${USERPASSWORD} EMAIL_RECIPIENT: ${EMAIL_RECIPIENT} ports: - 3000:3000 volumes: - db-data:/usr/src/app/data - ~/wsl-shared-db:/usr/src/app/data volumes: db-data:
- 这里
~/wsl-shared-db是WSL里的本地目录,你可以改成自己喜欢的路径 - 重启容器后,WSL里的这个目录就会和容器内的数据库目录实时同步,直接在WSL里进入该目录用sqlite3操作即可
- 要是遇到权限问题,记得给WSL的共享目录设置合适的权限:
chmod 755 ~/wsl-shared-db
小提醒
SQLite是单文件数据库,同一时间只能有一个写入实例。所以如果容器正在运行,操作本地的数据库文件时,别同时进行写入操作,避免数据库损坏哦~
内容来源于stack exchange




