Aet*_*tos 12 linux ubuntu root docker docker-compose
最近有人告诉我,运行docker或docker-compose使用 sudo 是一个大问题,我必须创建/将我的用户添加到docker组中才能在docker没有 . 我按照这里的文档做了docker-composesudo
现在,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/
Run Code Online (Sandbox Code Playgroud)
但是当我尝试运行 docker-compose 时,我得到了一个Permission Denied
~$ docker-compose --help
-bash: /usr/local/bin/docker-compose: Permission denied
Run Code Online (Sandbox Code Playgroud)
您能解释一下这是如何工作的吗?我认为有一个docker组可以使用这些命令,因为二进制文件属于这个组,但实际上它们不属于这个组,它们只属于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
Run Code Online (Sandbox Code Playgroud)
~$ 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
Run Code Online (Sandbox Code Playgroud)
那么,这是如何运作的呢?如何启用docker-compose属于该docker组的用户运行?
Pie*_*ume 25
sudo chmod a+x /usr/local/bin/docker-compose
Run Code Online (Sandbox Code Playgroud)
截至 2023 年 6 月,该docker-compose命令已被弃用,取而代之的是 compose 插件。
https://docs.docker.com/compose/install/linux/
安装 Compose 插件
sudo apt-get update
sudo apt-get install docker-compose-plugin
...
docker compose ps # note that docker and compose are now two words.
Run Code Online (Sandbox Code Playgroud)
将打开您的权限。
docker-compose只是一个包装器,它使用外部docker daemon,就像该命令实际上并不运行任何东西,而是向docker daemondocker发出命令。
您可以使用该DOCKER_HOST变量更改与之通信的 docker 守护进程。默认为空;当它为空时,并且docker假设docker-compose它位于/var/run/docker.sock
根据dockerd 文档:
默认情况下,在 /var/run/docker.sock 处创建 unix 域套接字(或 IPC 套接字),需要 root 权限或 docker 组成员身份。
这是通过向 docker 组授予对套接字的读写访问权限来强制执行的。
sudo apt-get update
sudo apt-get install docker-compose-plugin
...
docker compose ps # note that docker and compose are now two words.
Run Code Online (Sandbox Code Playgroud)
如https://docs.docker.com/engine/install/linux-postinstall/中所述,要将用户添加到docker组中,您可以这样做:
$ ls -l /var/run/docker.sock
srw-rw---- 1 root docker 0 nov. 15 19:54 /var/run/docker.sock
Run Code Online (Sandbox Code Playgroud)
话虽这么说,使用dockerwith 与使用它与组sudo相同,因为授予对 the 的访问权限相当于授予完全 root 访问权限:docker/var/run/docker.sock
来自https://docs.docker.com/engine/install/linux-postinstall/
docker 组授予相当于 root 用户的权限。有关这如何影响系统安全性的详细信息,请参阅 Docker Daemon Attack Surface。
如果 root 权限是您系统的安全问题,则会提到另一个页面:
要在没有 root 权限的情况下运行 Docker,请参阅以非 root 用户身份运行 Docker 守护程序(无根模式)。
docker 由多个元素组成:https ://docs.docker.com/get-started/overview/
首先,有客户:
sudo usermod -aG docker $USER # this adds the permissions
newgrp docker # this refreshes the permissions in the current session
Run Code Online (Sandbox Code Playgroud)
docker安装软件包时可以看到该命令已安装docker-ce-cli。
这里,ce代表社区版。
clidocker与 docker 守护进程(也称为dockerd.
dockerd是一个守护进程(服务器)并默认公开 unix 套接字/var/run/docker.sock;默认权限是root:docker.
还涉及其他组件,例如dockerd使用containerd: https: //containerd.io/
剩下的就是基本的linux权限管理:
/var/run/docker.sock。无论您是否是 sudoer 都不会改变任何事情。/var/run/docker.sock,您必须是root或正在该docker组中。docker-compose是另一个 cli,它具有与 相同的要求docker。对我有用的是通过运行(作为root,via )将自己添加到“ docker ”组:sudo
# usermod -a -G docker` *myUserName*
Run Code Online (Sandbox Code Playgroud)
您可能需要重新登录,因为当前 shell 可能尚未“知道”已添加到docker组。
但是如果您不想重新登录,可以运行以下命令
newgrp docker
Run Code Online (Sandbox Code Playgroud)
https://docs.docker.com/engine/install/linux-postinstall/
| 归档时间: |
|
| 查看次数: |
31943 次 |
| 最近记录: |