gpt4 book ai didi

linux - 使用不带 sudo 的 docker-compose 不起作用

转载 作者:行者123 更新时间:2023-12-04 18:24:52 29 4
gpt4 key购买 nike

最近有人告诉我,运行 dockerdocker-compose sudo 是一个很大的问题,我必须创建/添加我的用户到 docker组以运行dockerdocker-compose没有 sudo 的命令.根据 documentation here 我做了
现在,docker通过我的用户正常运行。例如:

~$ docker run hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b8dfde127a29: Pull complete
Digest: sha256:df5f5184104426b65967e016ff2ac0bfcd44ad7899ca3bbcf8e44e4461491a9e
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/

但是当我尝试运行 docker-compose 时,我得到一个 Permission Denied
~$ docker-compose --help

-bash: /usr/local/bin/docker-compose: Permission denied
你能解释一下这是如何工作的吗?我以为有一个 docker group 启用了这些命令的使用,因为二进制文件属于这个组,但实际上它们没有,它们只属于 root ...
~$ ls -al /usr/bin/docker*
-rwxr-xr-x 1 root root 71706288 Jul 23 19:36 /usr/bin/docker
-rwxr-xr-x 1 root root 804408 Jul 23 19:36 /usr/bin/docker-init
-rwxr-xr-x 1 root root 2944247 Jul 23 19:36 /usr/bin/docker-proxy
-rwxr-xr-x 1 root root 116375640 Jul 23 19:36 /usr/bin/dockerd
~$ ls -al /usr/local/bin/
total 12448
drwxr-xr-x 2 root root 4096 May 26 11:08 .
drwxr-xr-x 10 root root 4096 May 14 19:36 ..
-rwxr--r-- 1 root root 12737304 May 26 11:08 docker-compose
那么,这是如何工作的呢?
以及如何启用 docker-compose为属于 docker 的用户运行团体?

最佳答案

sudo chmod a+x /usr/local/bin/docker-compose
将打开您的权限。 docker-compose只是一个包装器,它使用外部 docker 守护进程,与 docker 相同。 command 实际上并没有运行任何东西,而是向 docker 守护进程发出命令。
您可以使用 DOCKER_HOST 更改与之通信的 docker 守护进程。多变的。默认为空;当它为空时, dockerdocker-compose假设它位于 /var/run/docker.sock根据 dockerd documentation :

By default, a unix domain socket (or IPC socket) is created at /var/run/docker.sock, requiring either root permission, or docker group membership.


这是通过向 docker 组授予对套接字的读写访问权限来强制执行的。
$ ls -l /var/run/docker.sock 
srw-rw---- 1 root docker 0 nov. 15 19:54 /var/run/docker.sock
https://docs.docker.com/engine/install/linux-postinstall/ 中所述, 将用户添加到 docker组,你可以这样做:
sudo usermod -aG docker $USER # this adds the permissions
newgrp docker # this refreshes the permissions in the current session

话虽如此,使用 dockersudo与使用 docker 相同组,因为授予 /var/run/docker.sock 的访问权限相当于给予完全根访问权限:
来自 https://docs.docker.com/engine/install/linux-postinstall/

The docker group grants privileges equivalent to the root user. For details on how this impacts security in your system, see Docker Daemon Attack Surface.


如果 root 权限对您的系统来说是一个安全问题,则会提到另一个页面:

To run Docker without root privileges, see Run the Docker daemon as a non-root user (Rootless mode).



docker 由多个元素组成: https://docs.docker.com/get-started/overview/
首先,有客户:
$ type docker
docker is /usr/bin/docker
$ dpkg -S /usr/bin/docker
docker-ce-cli: /usr/bin/docker
可以看到 docker命令在安装 docker-ce-cli 时安装包裹。
这里,ce 代表社区版。 docker cli 与 docker 守护进程通信,也称为 dockerd . dockerd是一个守护进程(服务器),默认暴露 unix socket /var/run/docker.sock ;哪些默认权限是 root:docker .
还涉及其他组件,例如 dockerd使用 containerd : https://containerd.io/

剩下的是基本的 linux 权限管理:
  • 操作 docker 守护进程与在该机器上拥有 root 权限相同。
  • 要操作 docker 守护进程,您需要能够读取和写入它所监听的套接字;在你的情况下是 /var/run/docker.sock . 不管你是不是 sudoer 都不会改变 .
  • 能够读写/var/run/docker.sock ,您必须是 root或在docker团体。
  • docker-compose是另一个 cli 它与 docker 具有相同的要求.

  • 澄清一点, 两个 dockerdocker-compose使用环境变量 DOCKER_HOST知道与谁交谈。对于这两种情况,如果变量为空,则默认值为 /var/run/docker.sock .

    关于linux - 使用不带 sudo 的 docker-compose 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68653051/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com