You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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/data
    sqlite3 <你的数据库文件名>.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

火山引擎 最新活动