前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在code server中使用rootless docker

在code server中使用rootless docker

原创
作者头像
simplezhao
修改2022-04-27 22:24:58
1.2K0
修改2022-04-27 22:24:58
举报
文章被收录于专栏:simple时间

上一篇部署了code server,搞了一个浏览器版VS Code Server 在code server部署完之后,安装docker插件,却无法连接docker,改怎么解决呢

docker默认是以root用户运行的,如果你也是通过root身份登录的主机,应该不会有该问题,下面介绍的非root用户如何解决

以下操作命令都是在Ubuntu系统下执行

安装docker插件

第一步是先安装docker,(* ̄︶ ̄)

首先你得在code server中安装docker插件,直接在插件中搜索即可

image-20220427153653431
image-20220427153653431

点击docker图标,各种提示Failed to connect

access failed
access failed

以rootless模式运行docker

在docker插件上也介绍了,如何在vscode中使用docker

image-20220427154201414
image-20220427154201414

打开链接按照步骤执行

  1. 安装uidmap
代码语言:shell
复制
   sudo apt-get install uidmap
  1. 安装dbus-user-session
代码语言:shell
复制
   sudo apt-get install -y dbus-user-session
  1. 将之前docker停止
代码语言:shell
复制
   sudo systemctl disable --now docker.service docker.socket

   sudo rm /var/run/docker.sock
  1. 使用当前non-root用户安装docker
代码语言:shell
复制
   dockerd-rootless-setuptool.sh install

   systemctl --user start docker
  1. 开机启动
代码语言:shell
复制
   sudo loginctl enable-linger $(whoami)
  1. 将docker host加入到环境变量中
代码语言:shell
复制
# 获取当前用户XDG\_RUNTIME\_DIR

   echo $XDG\_RUNTIME\_DIR

# 将下面两行加入到.bashrc或者.zshrc中,具体看用的哪种shell

# run/user/1000 为echo $XDG\_RUNTIME\_DIR的结果

   export PATH=/usr/bin:$PATH

   export DOCKER\_HOST=unix:///run/user/1000/docker.sock
代码语言:shell
复制
   source ~/.zshrc

# 或者

   source ~/.bashrc
  1. 运行docker 命令
代码语言:shell
复制
# 此时就可以运行docker 命令

   docker run -d -p 6379:6379 redis:latest

   docker ps

   CONTAINER ID   IMAGE          COMMAND                  CREATED       STATUS       PORTS                                       NAMES

   5e416fb0fa5d   redis:latest   "docker-entrypoint.s…"   7 hours ago   Up 7 hours   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   gifted\_diffie

在code server中生效docker操作

前面一路很顺利,但是发现在code server中还是不能用😓

image-20220427213459661
image-20220427213459661

而我们在之前的环境变量中已经配置了DOCKER_HOST = export DOCKER_HOST=unix:///run/user/1000/docker.sock

经过测试发现,在vscode terminal和 自己电脑上使用iterm通过ssh连接服务器之后的结果竟然不一样

  • echo $XDG_RUNTIME_DIR
代码语言:txt
复制
在iterm上
image-20220427213948405
image-20220427213948405
代码语言:txt
复制
在vscode terminal上
image-20220427214104155
image-20220427214104155

在vscode terminal $XDG_RUNTIME_DIR**为空**,这里没有再深入去看什么原因,而我已在之前的设置中将$XDG_RUNTIME_DIR替换为实际的结果run/user/1000

  • DOCKER_HOST没有生效

在vscode docker的上下文配置中,有两个contexts,一个default(使用当前DOCKER_HOST),另外一个是rootless

image-20220427214524692
image-20220427214524692

在code server中$DOCKER_HOST也是返回为空

image-20220427214721962
image-20220427214721962

因为没有连接到正确的docker.sock上,所以一直出错

在code server上切换contexts为rootless

在command palette中找到Docker Contexts: Use

image-20220427215039799
image-20220427215039799

将其调整为rootless

image-20220426220112259
image-20220426220112259

然后就可以在code server中使用docker 了

image-20220427215239438
image-20220427215239438

问题

除了上面提到的问题

$DOCKER_HOST、$XDG_RUNTIME_DIR在 code server terminal中为空

还有一个问题:

在code server terminal中为空无法使用systemctl --user restart|start|status docker.service命令

image-20220427215515635
image-20220427215515635

这个问题在troubleshooting中也提到了,但我没去解决,如果重启就在iterm中操作

image-20220427215701871
image-20220427215701871

这两个问题等后面有时间再去解决吧

参考

1(https://docs.docker.com/engine/install/linux-postinstall/)

2(https://github.com/microsoft/vscode-docker/wiki/Troubleshooting)

3(https://docs.docker.com/engine/security/rootless/#troubleshooting)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装docker插件
  • 以rootless模式运行docker
  • 在code server中生效docker操作
    • 在code server上切换contexts为rootless
    • 问题
    • 参考
    相关产品与服务
    容器镜像服务
    容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档