群晖自带的 GUI Docker 功能比较简单,无法自定义运行的参数(如 -d -e 等),而目前版本的 code-sever 在进行目录映射时需要 root 权限,所以需要添加 -u root 参数,以 root 用户启动容器

  • 提出“在进行目录映射时需要 root 权限”是因为如果在 Docker 中不添加目录映射,直接启动 code-server,容器是可以成功运行的

解决方法也很简单,使用群晖的计划任务,执行 CLI 的 Docker 指令

环境

  • DS3617xs 型号
  • DSM版本 6.1.715284 – Update 3

参考

步骤

有些步骤忘记截图了

  1. 在 Docker 中下载 code-server 容器
    • 在【注册表】中搜索 code-server
    • 注意选择 v2 版本
  2. 创建 code-server 映射文件夹
    • 在控制面版新建一文件夹
    • 在新的文件夹中再新建两个文件夹,用来存储 code-server 的配置文件和项目内容
  3. 通过 SSH 连接到群晖
    • 使用 admin 账号(即 Web 端管理员账号)即可
  4. 新建 docker 启动脚本
    • SSH 登陆后,因为没有 admin 账户的主目录,默认会进入根目录
    • 为了方便日后管理计划任务脚本,在根目录新建并进入定时任务文件夹
      mkdir Tasks
      cd Tasks
    • 新建 Docker 启动脚本
      sudo vim vscode-web.sh
      #添加以下内容
      docker run -it -d --restart=always -u root -p 0.0.0.0:8080:8080 -e PASSWORD='2DamnStrongPassword' -v "/volume{X}/VSCode/code-server:/home/coder/.local/share/code-server" -v "/volume{X}/VSCode/project:/home/coder/project" codercom/code-server:v2

      其中,如果只是本机访问将 0.0.0.0 改为 127.0.0.1
      /volume{X}/{文件夹名} 根据自己的情况修改,【volume+编号】即第二步在哪个存储空间新建的文件夹
      自行更改登陆密码 PASSWORD 变量

    • 因为是使用 root 用户登录,/home/coder/.local/share/code-server 下应该是没有配置文件的,理论上这个配置文件目录应该是 /root/.local/share/code-server,没有亲自尝试
    • 同样是因为 root 用户,如果之后直接在 ~ 目录下新建项目,使用上面的命令是无法将项目目录映射出来的,需要手动进入 /home/coder/project 目录新建项目
  5. 新建计划任务
    • 进入群晖的 Web 管理界面,打开【控制面板-计划任务-创建触发任务】
    • 如下新建计划任务
  6. 开启并执行计划任务

效果

 

随时随地 996 coding

环境

  • Ubuntu 18.04

准备

  • 至少 2GB 内存
    • docker 运行后空载占用 1.0 几 G 的内存

参考

步骤

如果直接复制粘贴 Github Readme 中的 docker 命令,会报权限不够之类的错误,需要在原本命令中加入使用 root 账户:

docker run -it -u root -p 127.0.0.1:8080:8080 -v "${HOME}/.local/share/code-server:/home/coder/.local/share/code-server" -v "$PWD:/home/coder/project" codercom/code-server:v2

注意加入了 -u root 参数

除此之外,如果想使用自定义密码,还可以添加 PASSWORD 变量

docker run -it -u root -p 127.0.0.1:8080:8080 -e PASSWORD='2DamnStrongPassword' -v "${HOME}/.local/share/code-server:/home/coder/.local/share/code-server" -v "$PWD:/home/coder/project" codercom/code-server:v2

效果

内网使用体验非常好,VPS(某为云1C2G)下无论是内网穿透还是本地 docker ,都会有一点慢