【亲测有效】运行docker ps 出现Got permission denied问题的解决方案

简介: 【亲测有效】运行docker ps 出现Got permission denied问题的解决方案

问题描述

今天在运行 docker ps 命令的时候出现如下问题:

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.38/containers/json: dial unix /var/run/docker.sock: connect: permission denied

1100338-20181101162225835-101447073.png

看提示信息好像是权限不够,我们试试 root 权限:

1100338-20181101162225491-20134882.png

我们发现用 root 权限就可以使用 docker 相关命令,那我们想在普通用户下使用 docker 相关命令,这该怎么办呢?

我们去 Docker Mannual 找到原因,原因如下:

Manage Docker as a non-root user
The docker daemon binds to a Unix socket instead of a TCP port. By default that Unix socket is owned by the user root and other users can only access it using sudo. The docker daemon always runs as the root user.
If you don’t want to use sudo when you use the docker command, create a Unix group called docker and add users to it. When the docker daemon starts, it makes the ownership of the Unix socket read/writable by the docker group.

上面这段话的意思是 docker 进程使用 Unix Socket 而不是 TCP 端口。而默认情况下, Unix socket属于 root 用户,需要 root 权限才能访问。

我们该怎么解决这个问题呢?

解决方案一

使用 sudo 获取管理员权限,运行 docker 命令(当然我不推荐这种方法,因为我没成功过,似乎还是出现了如上问题)

解决方案二

由于 docker 守护进程启动的时候,会默认赋予名字为 docker 的用户组读写 Unix socket 的权限,因此只要创建 docker 用户组,并将当前用户加入到 docker 用户组中,那么当前用户就有权限访问 Unix socket 了,进而也就可以执行 docker 相关命令了。

我们可以使用如下命令解决问题:

sudo groupadd docker     #添加docker用户组
sudo gpasswd -a $USER docker     #将登陆用户加入到docker用户组中
newgrp docker     #更新用户组
docker ps    #测试docker命令是否可以使用sudo正常使用

然后我们可以完美地解决了这个问题,效果如下:


1100338-20181101162224934-1651950297.png

目录
相关文章
|
15天前
|
JSON JavaScript 开发者
Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
【8月更文挑战第7天】Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
|
11天前
|
Kubernetes Shell 测试技术
在Docker中,可以在一个容器中同时运行多个应用进程吗?
在Docker中,可以在一个容器中同时运行多个应用进程吗?
|
12天前
|
Shell Docker 容器
在Docker中,如何停止所有正在运行的容器?
在Docker中,如何停止所有正在运行的容器?
|
13天前
|
前端开发 PHP 开发者
React Server Component 使用问题之怎么使用Docker运行PHP应用
React Server Component 使用问题之怎么使用Docker运行PHP应用
|
17天前
|
监控 Ubuntu Docker
如何在Docker容器启动时自动运行脚本
【8月更文挑战第13天】在Docker容器启动时自动运行脚本可通过以下方式实现:1) 使用`ENTRYPOINT`或`CMD`指令在Dockerfile中直接指定启动脚本,如`ENTRYPOINT ["/startup.sh"]`;2) 启动容器时通过`--entrypoint`参数指定脚本路径;3) 利用supervisor等进程管理工具自动启动与监控脚本,确保其稳定运行。确保脚本具有执行权限并正确设置依赖资源路径。
261 1
|
2天前
|
前端开发 jenkins 持续交付
jenkins学习笔记之二十:docker in docker运行pipeline
jenkins学习笔记之二十:docker in docker运行pipeline
|
3天前
|
Shell Python
如何将PyCharm中的终端运行前面的PS如何修改成当前环境
这篇文章介绍了如何在PyCharm的终端中修改命令提示符(PS)以反映当前激活的环境,通过更改PyCharm设置中的Shell Path实现。
|
7天前
|
开发框架 监控 .NET
【Azure 应用程序见解】在Docker中运行的ASP.NET Core应用如何开启Application Insights的Profiler Trace呢?
【Azure 应用程序见解】在Docker中运行的ASP.NET Core应用如何开启Application Insights的Profiler Trace呢?
|
11天前
|
Docker 容器
docker: 修改运行容器的端口
docker: 修改运行容器的端口
|
17天前
|
存储 缓存 Ubuntu
Docker详解:如何创建运行Memcached的Docker容器
Docker详解:如何创建运行Memcached的Docker容器
13 0
下一篇
云函数