我在我的机器上安装了Docker,我有Ubuntu操作系统。比我安装了docker,当我运行
sudo docker run hello-world
一切都没问题,但是我想隐藏单词sudo
以缩短命令。
如果我在没有单词sudo
docker run hello-world
显示以下内容:
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.35/containers/create: dial unix /var/run/docker.sock: connect: permission denied.See 'docker run --help'.
当我尝试制作
时,情况也是如此docker-compose up
我该如何解决这个问题?
答案 0 :(得分:132)
升级后,我的权限被拒绝。 进行'mkb'post install steps的步骤没有任何改变,因为我的用户已经在'docker'组中了;我重试两次,但都没有成功。
经过一个小时的搜索,以下解决方案最终得以实现:
sudo chmod 666 /var/run/docker.sock
解决方案来自Olshansk。
好像升级程序在没有docker组的足够权限的情况下重新创建了套接字。
问题: 硬性的 chmod 打开了安全漏洞,每次重新启动后,都会一次又一次地出现此错误,您每次都必须重新执行上述命令。我想要一劳永逸的解决方案。为此,您有两个问题:
1) SystemD 问题:仅使用所有者“ root”和组“ root”创建套接字。 您可以使用以下命令检查第一个问题:
ls -l /lib/systemd/system/docker.socket
如果这一切都很好,您应该看到“ root / docker”而不是“ root / root”。
2)图形登录出现问题:https://superuser.com/questions/1348196/why-my-linux-account-only-belongs-to-one-group 您可以使用以下命令检查第二个问题:
groups
如果一切正确,您应该在列表中看到 docker 组。 如果没有,请尝试命令
sudo su $USER -c groups
如果看到 docker 组,则是因为该错误。
解决方案: 如果您设法获得图形登录的解决方法,则应该执行此操作:
sudo chgrp docker /lib/systemd/system/docker.socket
sudo chmod g+w /lib/systemd/system/docker.socket
但是,如果您无法管理此错误,则可能是一个不错的解决方案:
sudo chgrp $USER /lib/systemd/system/docker.socket
sudo chmod g+w /lib/systemd/system/docker.socket
之所以能够进行此操作,是因为您处于图形环境中,并且可能是计算机上的唯一用户。 在这两种情况下,您都需要重新启动(或 sudo chmod 666 /var/run/docker.sock)
答案 1 :(得分:101)
如果要以非root用户身份运行docker,则需要将其添加到docker组。
创建泊坞组。
$ sudo groupadd docker
将您的用户添加到泊坞窗组。
$ sudo usermod -aG docker $USER
退出并再次登录并运行。
$ docker run hello-world
取自docker官方文档:https://docs.docker.com/install/linux/linux-postinstall/#manage-docker-as-a-non-root-user
答案 2 :(得分:7)
docker
组sudo usermod -aG docker $USER
/var/run/docker.sock
sudo chmod 666 /var/run/docker.sock
答案 3 :(得分:7)
$ sudo groupadd docker
$ sudo usermod -aG docker $USER
3。切换到docker组的会话
$newgrp - docker
$docker run hello-world
答案 4 :(得分:4)
只需要修改sock文件的权限即可。
sudo chmod 666 /var/run/docker.sock
这肯定会奏效。
答案 5 :(得分:3)
尝试在unix:///var/run/docker.sock上连接到Docker守护进程套接字时,获得权限被拒绝:获取http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json:拨打unix /var/run/docker.sock:connect:权限拒绝
sudo chmod 666 /var/run/docker.sock
这解决了我的问题。
答案 6 :(得分:2)
使用此命令
sudo usermod -aG docker $USER
然后重新启动计算机,这对我有用。
答案 7 :(得分:2)
答案 8 :(得分:2)
这对我有用:
进入容器并修改文件的ACL
sudo usermod -aG docker $USER
sudo setfacl --modify user:$USER:rw /var/run/docker.sock
这是比使用 chmod 更好的解决方案。
答案 9 :(得分:1)
您可以按照以下步骤操作,这将为您工作:
sudo groupadd docker
sudo usermod -aG docker $USER
groups
newgrp docker
的会话sudo chown root:docker /var/run/docker.sock
的组所有权sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
的所有权sudo chmod g+rwx "$HOME/.docker" -R
测试完成后,您可以运行docker ps -a
答案 10 :(得分:1)
我用 sudo
推荐试试这个推荐,没问题。sudo docker pull hello-world
或 sudo docker run hello-world
答案 11 :(得分:1)
在安装docker,创建'docker'组并将其添加用户后,编辑docker服务单元文件:
sudo nano /usr/lib/systemd/system/docker.service
在[服务]部分中添加两行:
SupplementaryGroups=docker
ExecStartPost=/bin/chmod 666 /var/run/docker.sock
保存文件(Ctrl-X,y和Enter)
运行并启用Docker服务:
sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl enable docker
答案 12 :(得分:1)
您随时可以在https://docs.docker.com/install/linux/linux-postinstall/文档中尝试Manage Docker as a non-root user
段落。
如果问题仍然存在,请执行以下操作以解决此问题:
sudo chmod 666 /var/run/docker.sock
答案 13 :(得分:1)
此错误的魅力所在-
sudo chmod 666 /var/run/docker.sock
答案 14 :(得分:1)
lightdm和kwallet附带一个错误,该错误似乎在登录时未通过补充组。为了解决这个问题,我还不得不在sudo usermod -aG docker $USER
旁边注释掉
auth optional pam_kwallet.so
auth optional pam_kwallet5.so
到
#auth optional pam_kwallet.so
#auth optional pam_kwallet5.so
在/etc/pam.d/lightdm
中重启之前,以使docker-group实际生效。
错误:https://bugs.launchpad.net/lightdm/+bug/1781418和此处:https://bugzilla.redhat.com/show_bug.cgi?id=1581495
答案 15 :(得分:0)
在Centos上安装Docker之后。在以下命令下运行时,出现以下错误。
[centos@aiops-dev-cassandra3 ~]$ docker run hello-world
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.soc k/v1.40/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.
更改docker.socket的组和权限
[centos@aiops-dev-cassandra3 ~]$ ls -l /lib/systemd/system/docker.socket
-rw-r--r--. 1 root root 197 Nov 13 07:25 /lib/systemd/system/docker.socket
[centos@aiops-dev-cassandra3 ~]$ sudo chgrp docker /lib/systemd/system/docker.socket
[centos@aiops-dev-cassandra3 ~]$ sudo chmod 666 /var/run/docker.sock
[centos@aiops-dev-cassandra3 ~]$ ls -lrth /var/run/docker.sock
srw-rw-rw-. 1 root docker 0 Nov 20 11:59 /var/run/docker.sock
[centos@aiops-dev-cassandra3 ~]$
使用以下docker命令进行验证
[centos@aiops-dev-cassandra3 ~]$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
[centos@aiops-dev-cassandra3 ~]$
答案 16 :(得分:0)
为了解决这个问题,我搜索了我的docker和docker-compose的安装位置。就我而言,docker
中安装了/usr/bin/docker
,docker-compose
路径中安装了/usr/local/bin/docker-compose
。然后,我在终端写下这个:
停泊者:
sudo chmod +x /usr/bin/docker
至docker-compose
:
sudo chmod +x /usr/local/bin/docker-compose
现在我不需要在我的命令docker中写入单词sudo
/ ********************************************** ******** /
勘误表:
@mkasberg评论了这个问题的最佳解决方案。我引述评论:
That might work, you might run into issues down the road. Also, it's a security vulnerability. You'd be better off just adding yourself to the docker group, as the docs say. sudo groupadd docker, sudo usermod -aG docker $USER.
Docs:
https://docs.docker.com/install/linux/linux-postinstall/
非常感谢!
答案 17 :(得分:0)
打开终端并输入此命令
sudo chmod 666 /var/run/docker.sock
答案 18 :(得分:0)
重启机器对我有用。
$ reboot
答案 19 :(得分:0)
我也遇到了类似的问题,但是我想要创建的容器需要将/var/run/docker.sock作为卷挂载(Portainer Agent),同时在不同的命名空间下运行它们。通常,容器并不关心容器从哪个名称空间开始的(这很重要),但是由于访问是从不同的名称空间进行的,因此必须加以规避。
在容器的运行命令中添加--userns=host
可以使其使用正确的权限。
一个特定的用例,但是经过比我想承认的更多的研究时间,我只是认为如果其他人最终遇到这种情况,我应该与全世界分享它:)
答案 20 :(得分:0)
绝对不是问题所在,但由于它是在搜索错误消息时的第一个搜索结果,因此我将其保留在这里。
首先,使用以下命令检查docker服务是否正在运行:
systemctl status docker.service
如果它没有运行,请尝试启动它:
sudo systemctl start docker.service
...并再次检查状态:
systemctl status docker.service
如果尚未启动,请调查原因。可能是您修改了配置文件并出错(就像我在修改/etc/docker/daemon.json
时所做的一样)
答案 21 :(得分:0)
认真的人。不要在您的组中添加Docker或修改套接字posix(无需强化SELinux),这是制作root privesc的一种简单方法。只需在.bashrc中添加一个别名,它就更简单,更安全了:alias dc ='sudo docker'。
答案 22 :(得分:0)
在 Linux 环境中,安装 docker
和 docker-compose
后重启需要更好地工作 docker。
$ reboot
或重启docker
$ sudo systemctl restart docker
答案 23 :(得分:0)
Docker 守护进程绑定到 Unix 套接字而不是 TCP 端口。 默认情况下,Unix 套接字由用户 root 拥有,其他用户只能使用 sudo 访问它。 Docker 守护进程始终以 root 用户身份运行。
如果不想在 docker 命令前加上 sudo,请创建一个名为 docker 的 Unix 组并向其中添加用户。当 Docker 守护进程启动时,它会创建一个可供 docker 组成员访问的 Unix 套接字。
要创建 docker 组并添加您的用户:
创建 docker 组
sudo groupadd docker
将您的用户添加到 docker 组
sudo usermod -aG docker $USER
退出并重新登录,以便重新评估您的群组成员资格。
如果在虚拟机上测试,可能需要重启虚拟机才能使更改生效。
在 X Windows 等桌面 Linux 环境中,完全退出会话,然后重新登录。
在 Linux 上,您还可以运行以下命令来激活对组的更改:
newgrp docker
验证您可以在没有 sudo 的情况下运行 docker 命令。下面的命令下载一个测试镜像并在容器中运行它。当容器运行时,它会打印一条信息性消息并退出
docker run hello-world
如果您在将用户添加到 docker 组之前最初使用 sudo 运行 Docker CLI 命令,您可能会看到以下错误,这表明您的 ~/.docker/ 目录是使用不正确的权限创建的由于 sudo 命令。
WARNING: Error loading config file: /home/user/.docker/config.json -
stat /home/user/.docker/config.json: permission denied
要解决此问题,请删除 ~/.docker/ 目录(它会自动重新创建,但所有自定义设置都将丢失),或使用以下命令更改其所有权和权限:< /p>
sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
sudo chmod g+rwx "$HOME/.docker" -R
可以在此处找到 linux 上 docker 的所有其他安装后步骤https://docs.docker.com/engine/install/linux-postinstall/
答案 24 :(得分:-1)
sudo groupadd docker
grep -Po '^sudo.+:\K.*$' /etc/group
export USER=demoUser
sudo usermod -aG docker $USER
newgrp docker
docker run hello-world
reboot
sudo chmod 777 /var/run/docker.sock
答案 25 :(得分:-2)
要访问超级用户或root用户,请遵循:
在 user @ computer :
$sudo su
输入密码后,您将位于 root @ computer :
$docker run hello-world
答案 26 :(得分:-2)
chmod 0777 / home / huginn / mysql-data
这是我的解决方法。
答案 27 :(得分:-3)
sudo chmod 666 /var/run/docker.sock
这在我遇到错误甚至登录docker时对我有帮助 但是现在这在我的系统中可以正常工作。