解决 Linux 中 IntelliJ IDEA 连接 Docker 守护进程无权限问题

文章介绍了在Linux环境下,IntelliJIDEA连接Docker守护进程时遇到的权限不足问题,以及三种解决方案。包括通过sudo或以root用户运行IDEA,将当前用户添加到docker组,以及修改docker.socket的Systemd配置来定制socket权限。最后一种方法允许自定义socket权限,而无需使用root权限或改变用户组。
摘要由CSDN通过智能技术生成

解决 Linux 中 IntelliJ IDEA 连接 Docker 守护进程权限问题

问题

如果使用 Linux 系统,并且本地安装了 Docker Engine,在 IDEA 中可以通过 Unix socket 连接到 Docker 守护进程,但是有可能出现权限不够无法连接的错误:
Cannot connect: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? (Details: [13]权限不够)
IDEA 连接 Docker 权限不够

解决方法一

可以通过 sudo 或以 root 用户启动 IDEA,这种方式启动后可以解决权限问题,但是 IDEA 会在 root 用户目录下创建隐藏配置目录(同时也可以在 IDEA 中使用 1024 以下端口启动项目了)。我本人不太想使用这种方式,会修改到 root 用户的一些文件,并且我自己平常也要尽可能少的使用 root 用户,Linux 也有 capabilities 等扩大普通用户能力的方式,也是可以更少地使用超级用户做一些工作。

解决方法二

查看 /run/docker.sock 的权限可知只有 root 用户和 docker 组有读写权限:

$ ls -l /var/run
lrwxrwxrwx 1 root root 4 128 14:22 /var/run -> /run # /var/run 是 /run 的链接文件
$ ls -l /run/docker.sock 
srw-rw---- 1 root docker 0 414 22:15 /run/docker.sock

可以将当前用户加入 docker 组获得访问权限:

sudo usermod -aG docker $USER # 将登录用户添加到 docker 组中
newgrp docker # 更改 GID

这种方式将当前登录用户的 gid 修改为 docker,可能在其他地方会出现权限问题。

解决方法三

  1. 查看 docker.socket 状态信息:
    $ systemctl status docker.socket 
    ● docker.socket - Docker Socket for the API
         Loaded: loaded (/lib/systemd/system/docker.socket; enabled; vendor preset: enabled)
         Active: active (running) since Fri 2023-04-14 22:15:44 CST; 22min ago
          Until: Fri 2023-04-14 22:15:44 CST; 22min ago
       Triggers: ● docker.service
         Listen: /run/docker.sock (Stream)
          Tasks: 0 (limit: 38111)
         Memory: 4.0K
         CGroup: /system.slice/docker.socket
    
  2. 修改 docker.socket 单元文件:
    $ sudo vim /lib/systemd/system/docker.socket
    [Unit]
    Description=Docker Socket for the API
    
    [Socket]
    # If /var/run is not implemented as a symlink to /run, you may need to
    # specify ListenStream=/var/run/docker.sock instead.
    ListenStream=/run/docker.sock
    SocketMode=0660
    SocketUser=root
    SocketGroup=root
    
    [Install]
    WantedBy=sockets.target
    
  3. 重新加载守护进程配置,重启守护进程:
    $ sudo systemctl daemon-reload
    $ sudo systemctl restart docker.socket
    $ ls -l /run/docker.sock
    srw-rw---- 1 root root 0 414 22:58 /run/docker.sock
    

这种方式可以自定义 /run/docker.sock 的权限,解决权限不够问题。

最终效果:

在这里插入图片描述
成功解决!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值