关于 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 回帖

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • fradeet

    你需要在容器开着的时候执行修改操作。重启只是为了让文件生效。

  • 其他回帖
  • fradeet

    听你说不行个人去试了一遍,发现这个方法确实是已经被修复不能用了。Docker 版本目前只能使用命令参数去配置授权码。

    另外,从该版本开始通过 Docker 部署时必须设置访问授权码命令行参数 --accessAuthCode,不设置的话无法正常启动。

    思源笔记 v2.10.8 发布,修复缺陷 - 链滴 (ld246.com)

    个人忘记了这回事,非常抱歉。

  • 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 回复
  • daziduan
    作者

    @fradeet

    你好,整个实验过程如下图

    2.png

    根据你的回复

    首先我用命令停止 fllsiyuan

    docker stop fllsiyuan
    

    然后下载在本地修改授权码。
    15.37,我将授权码更改为 22 后传到本地目录下 conf.json。

    使用下面命令拷贝到容器。

    docker cp ./conf.json fllsiyuan:/root/document/fllsynote/conf/conf.json
    

    我再次使用命令从容器下载到宿主机来验证。

    docker cp fllsiyuan:/root/document/fllsynote/conf/conf.json ./conf111.json
    

    如图片 conf111.json,下载到本地查看授权码为 22。

    使用命令启动 fllsiyuan

    docker start fllsiyuan 
    

    验证发现,授权码没变更为 22。

    我再次下载 conf.json,如图 15.42 的 conf222.json 结果授权码还是 11。

    docker cp fllsiyuan:/root/document/fllsynote/conf/conf.json ./conf222.json
    

    另外使用

    docker-compose up
    

    也按预想的一样,没有更改授权码,因为这个命令是以 yml 文件信息启动的。我们没有更改 yml 文件中的信息。所有当然,授权码不会变更。

    请教一下,是我方法错误还是那里步骤不对?🙏

    1 回复
  • 查看全部回帖