关于 Docker 思源笔记使用 Docker-compose 更改授权码的问题

私有化部署

按照 思源笔记 docker 部署及第三方同步 做的 docker 私有化部署。

yml 文件如下:

version: '3'

services:
  siyuan:
    image: b3log/siyuan:latest
    container_name: fllsiyuan
    restart: always
    volumes:
      - /siyuan:/root/document/fllsynote
    command: [--workspace=/root/document/fllsynote,--lang=zh_CN,--accessAuthCode=88888888]
    ports:  
      - "7777:6806"

更改授权码

长期使用后,授权码 8 个 8 太长,想修改为 11。

使用命令


docker-compose stop siyuan

然后修改 yml 文件中授权码为 11,如下。

version: '3'

services:
  siyuan:
    image: b3log/siyuan:latest
    container_name: fllsiyuan
    restart: always
    volumes:
      - /siyuan:/root/document/fllsynote
    command: [--workspace=/root/document/fllsynote,--lang=zh_CN,--accessAuthCode=11]
    ports:  
      - "7777:6806"

然后

docker-compose start siyuan

经测试授权码未更改为 11,原先的思源笔记数据还在。

使用新的命令

docker-compose up -d

经测试授权码更改为 11,原先的思源笔记数据丢失(提前已备份)。

问题

请教各位贤达,这是怎么回事?如何达到目的(docker-compose 修改授权码,思源笔记数据不丢失)?

还是 docker-compose 不能实现?

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    22391 引用 • 89650 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 首先,您发的评论都没有回复别人,对方是收不到通知的。

    其次,我说的不了解 docker 运行原理说的是 docker 技术层面的东西。像这里的 volumes 设置和 ports 设置还有 command,全都是和 dockerfile 以及 docker 容器是如何被 build、run 息息相关的,虽然不是说你不懂 docker 技术架构就不能用 docker。但是会给你带来很多麻烦,比如您现在做的一堆错误尝试都是能避免的……

    不过有一点您说的很对,那就是做这些操作之前一定要备份好笔记。

    举个例子,最好的试错和学习方式,是拿一个 demo 镜像来看看这些 volumes 设置和 ports 设置还有 command 到底是什么东西,而不是拿需要特殊配置的思源容器来实验。

    最后,我看了您引用的那个教程,那个教程里面写的也有点误导人,容器里面用的反而是 root 路径,容器外面用的是 /siyuan,很容易产生误解。因为一般情况下都是不建议直接在 linux 宿主机的 / 根路径下创建文件夹存放数据的。这就好比你在 Windows 电脑上专门分了个盘作为思源的工作空间路径,很容易出现问题。

    1 回复
    1 操作
    muxue 在 2024-07-25 19:41:58 更新了该回帖
  • 其他回帖
  • docker-compose start 是不会更新 yml 文件的修改的,up 才会,所以你 start 之后访问授权码没有变化是正常的。

    至于数据丢失,不太清楚什么问题。如果你没有修改过 volumes 的绑定,应该不会数据丢失才对。请检查宿主机的 /siyuan 目录里面有没有内容。现在看你这个设置我感觉你是不是把宿主机和容器内的路径搞反了。

  • daziduan
    作者

    @fradeet

    你好。我确实想搞明白,这种方法是否可行。

    我按你的建议,容器开着时候执行拷贝,修改,再拷贝回去,restart。如下。

    3.png

    能够看到执行命令后有,successfully 的反馈。

    但是授权码没有更改。

    docker inspect fllsy_c
    

    看到的授权码也是以前的授权码。

    请帮忙看下,哪里出问题了?🙏

    1 回复
  • daziduan
    作者

    实践是检验真理的唯一标准

    非常非常感谢 @muxue ,你的材料给了我很多思考。

    先回复你一下,/siyuan 目录下没有任何文件,也就是说宿主文件和容器之间路径没有正确的映射关系

    从开头捋一下。

    下面是原先的 yml 文件

    version: '3'
    
    services:
      siyuan:
        image: b3log/siyuan:latest
        container_name: fllsiyuan
        restart: always
        volumes:
          - /siyuan:/root/document/fllsynote
        command: [--workspace=/root/document/fllsynote,--lang=zh_CN,--accessAuthCode=88888888]
        ports:  
          - "7777:6806"
    

    昨天,我把 Docker 删除了,重新安装。

    docker rm -f fllsiyuan
    docker-compose up
    

    之后出现的 logs 文件,如下:

    fllsiyuan | W 2024/07/24 19:23:09 file.go:210: determines whether [/root/document/fllsynote] is a directory failed: [lstat /root/document/fllsynote: permission denied]
    fllsiyuan | W 2024/07/24 19:23:09 working.go:258: use the default workspace [/home/siyuan/SiYuan] since the specified workspace [/root/document/fllsynote] is not a dir
    fllsiyuan | I 2024/07/24 19:23:09 working.go:147:
    

    经过研究,本段 logs 的意思是,在容器中[/root/document/fllsynote]访问?读写允许被拒绝,使用默认的容器目录[/home/siyuan/SiYuan]。(注意,此时容器中思源笔记还在正常运行!!这可能是一切问题的源头)(**所以,我不知道此种情况下宿主目录与容器目录的对应关系,一直运行至今 VPS 没敢关机!😭 **)

    那我把容器目录改为[/home/siyuan/SiYuan]是不是就可行了?也不行

    fllsiyuan  | E 2024/07/25 14:16:34 working.go:280: create os tmp dir [/home/siyuan/SiYuan/temp/os] failed: mkdir /home/siyuan/SiYuan/temp: permission denied
    

    今天验证了一下,也是会出错的,denied。

    其实是权限的问题,根据 @mexue 的提示,使用

    chgrp 1000 /siyuan
    chown 1000 /siyuan
    
    

    下面我把在 final shell 中的 log 文件贴出来,大家看下。

    root@dazi:/# cd siyuan
    root@dazi:/siyuan# docker-compose up
    [+] Running 1/1
     ⠿ Container fllsiyuan  Created                                                                                                         0.2s
    Attaching to fllsiyuan
    fllsiyuan  | E 2024/07/25 14:40:55 working.go:280: create os tmp dir [/home/siyuan/SiYuan/temp/os] failed: mkdir /home/siyuan/SiYuan/temp: permission denied
    fllsiyuan exited with code 0
    fllsiyuan  | E 2024/07/25 14:40:56 working.go:280: create os tmp dir [/home/siyuan/SiYuan/temp/os] failed: mkdir /home/siyuan/SiYuan/temp: permission denied
    fllsiyuan exited with code 0
    fllsiyuan  | E 2024/07/25 14:40:57 working.go:280: create os tmp dir [/home/siyuan/SiYuan/temp/os] failed: mkdir /home/siyuan/SiYuan/temp: permission denied
    fllsiyuan exited with code 25
    fllsiyuan  | E 2024/07/25 14:40:58 working.go:280: create os tmp dir [/home/siyuan/SiYuan/temp/os] failed: mkdir /home/siyuan/SiYuan/temp: permission denied
    fllsiyuan exited with code 25
    ^Z
    [1]+  Stopped                 docker-compose up
    root@dazi:/siyuan# docker rm -f fllsiyuan
    fllsiyuan
    root@dazi:/siyuan# chgrp 1000 /siyuan
    root@dazi:/siyuan# chown 1000 /siyuan
    root@dazi:/siyuan# docker-compose up
    [+] Running 1/1
     ⠿ Container fllsiyuan  Created                                                                                                         0.1s
    Attaching to fllsiyuan
    fllsiyuan  | I 2024/07/25 14:41:46 working.go:147: 
    

    此时在 /siyuan 目录下生成了如下图片的数据文件:

    1.png

    OK! 至此,总算是宿主机和容器路径能正确映射了。

    这下,我的 VPS 可以重启了,即使是意外断电也不怕资料丢失了。😄


    此时使用下列命令可更改授权码且资料不丢失

    docker-compose stop fllsiyuan
    #此时使用nano更新授权码为11
    docker-compose up
    

    总结

    其实本问题是两个问题

    1、更改授权码。

    2、为什么资料会丢失。

    关键是我在 docker 安装思源笔记时就错了,没有正确映射宿主机和容器正确路径,所以糅合成了一个问题。

    鸣谢

    感谢 @muxue 的回复。

    另,@fradeet ,你的方案我后续会进行验证,谢谢你。

    保留

    对 @muxue "最后的最后,非常不建议各位在没有弄清楚 docker 运行的原理的情况下,就盲目上 docker……"的说法我不赞同。

    我认为:在做好备份的情况下,即使没有彻底弄懂 docker 运行的原理,也勇敢的去尝试吧,上 docker 本来就是弄懂 docker 运行原理的过程。

    回忆过往时,人们从来因为没做过什么而遗憾,而不是为做过什么而遗憾!

    1 回复
  • 查看全部回帖