我在装有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

我该如何解决这个问题?


当前回答

我尝试了所描述的所有方法,但都无济于事。解决方案是在运行selenoid和selenoid-ui时使用——use-drivers参数。下面是我的Dockerfile的完整列表。

FROM selenoid/chrome
USER root
RUN apt-get update
RUN apt-get -y install docker.io
RUN curl -s https://aerokube.com/cm/bash | bash
RUN ./cm selenoid start --vnc --use-drivers
RUN ./cm selenoid-ui start --use-drivers
EXPOSE 4444 8080
CMD ["-conf", "/etc/selenoid/browsers.json", "-video-output-dir", "/opt/selenoid/video/"]

其他回答

认真的人。不要在你的组中添加Docker或修改套接字posix(没有加固SELinux),这是一个简单的方法来创建一个根privesc。只要在你的。bashrc中添加一个别名,这样更简单更安全:alias dc='sudo docker'。

我尝试了这个推荐与sudo推荐,它是可以的。Sudo docker pull hello-world或Sudo docker run hello-world

我也遇到了类似的问题,但是我想创建的容器需要挂载/var/run/docker。sock作为一个卷(Portainer Agent),同时在不同的名称空间下运行它。通常容器并不关心它是从哪个名称空间开始的——这就是问题所在——但由于访问是从不同的名称空间进行的,因此必须避免这一点。

在容器的run命令中添加——userns=host,使其能够获得正确的权限。

这是一个非常具体的用例,但在经过了比我想要承认的更多的研究时间后,我只是想,如果其他人最终陷入这种情况,我应该与世界分享它:)

如果你想以非root用户运行docker,那么你需要将它添加到docker组中。

如果docker组不存在,请创建docker组

$ sudo groupadd docker

将您的用户添加到docker组。

$ sudo usermod -aG docker $USER

登录到新的docker组(以避免再次注销/登录;但如果还不够,请尝试重新启动):

$ newgrp docker

检查docker是否可以在没有root的情况下运行

$ docker run hello-world

如果仍然有错误,重新启动

$ reboot

警告

docker组授予等同于root用户的权限。有关这如何影响系统安全性的详细信息,请参阅Docker Daemon攻击面。

摘自docker官方文档: manage-docker-as-a-non-root-user

你可以尝试在https://docs.docker.com/install/linux/linux-postinstall/文档中以非根用户的身份管理Docker。

在这样做之后,如果问题仍然存在,那么您可以运行以下命令来解决它:

sudo chmod 666 /var/run/docker.sock