Podman w/Docker Compose - 以用户身份运行?

Podman w/Docker Compose - 以用户身份运行?

我正在尝试docker-compose使用 Podman,根据现在已支持。我运行说明,并且在以 root 身份运行时确实可以命中套接字,但是当我以用户身份尝试时,我得到:

尝试连接到位于 unix:///var/run/docker.sock 的 Docker 守护程序套接字时权限被拒绝:获取“http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json?all= 1&filters=%7B%22label%22%3A%7B%22com.docker.compose.project%3Dproject%22%3Atrue%7D%7D":拨打unix /var/run/docker.sock:连接:权限被拒绝

是否可以与用户权限podman一起使用?docker-compose或者你必须是 root 吗?

编辑

添加了 docker 组,然后将我的用户添加到其中,然后重新启动以绝对确定更改会生效:

[grant@rockylinux docker-compose-files]$ ./compose.sh setup --project
Pass: Docker compose version is 2.15.1.
Running docker-compose --project-directory /home/grant/project -f /home/grant/project/docker-compose-files/docker-compose.yml --profile project up  -d
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.project%3Dproject%22%3Atrue%7D%7D": dial unix /var/run/docker.sock: connect: permission denied
[grant@rockylinux docker-compose-files]$ cat /etc/group
...SNIP...
grant:x:1000:
docker:x:1001:grant

编辑2

在上述博客文章中测试了curl命令。它以 root 身份工作,但不能以用户身份工作

[grant@rockylinux docker-compose-files]$ curl -H "Content-Type: application/json" --unix-socket /var/run/docker.sock http://localhost/_ping
curl: (7) Couldn't connect to server
[grant@rockylinux docker-compose-files]$ sudo curl -H "Content-Type: application/json" --unix-socket /var/run/docker.sock http://localhost/_ping
OK

答案1

您必须将 podman 设置为以用户身份运行。

  1. 如果您已经将 podman 设置为运行,systemctl enable podman则需要使用 来反转它systemctl disable --now podman podman.socket。如果您之前安装过,您会注意到从到 的podman-docker软链接现在将被破坏,因为现在不再在 root 下运行/var/run/docker.sock/run/podman/podman.sockpodman
  2. 接下来,您需要设置 podman 以使用用户服务systemctl enable --now --user podman podman.socket。这将在 处创建一个套接字/run/user/1000/podman/podman.sock。请注意,该套接字由用户拥有。看这里有关用户服务的更多详细信息。 TLDR:它不是在系统启动时运行该服务,而是在用户登录时运行该服务。
  3. 最后,我们需要将DOCKER_HOST环境变量设置为指向我们的新套接字。您可以使用 来执行此操作export DOCKER_HOST=unix:///run/user/1000/podman/podman.sock警告:您的路径可能不同。您可以使用 检查 podman 正在使用的套接字podman info --format '{{.Host.RemoteSocket.Path}}'

如果需要调试,可以通过 podman 服务获取调试输出podman --log-level=debug system service -t0。您可以使用以下命令检查与套接字本身的连接curl --unix-socket /run/user/1000/podman/podman.sock -X GET http://d/version`[d]`

答案2

是的,可以通过用户权限将 Podman 与 Docker Compose 结合使用。您看到的错误消息表明您运行命令的用户没有访问 Docker 守护进程套接字的权限。要解决此问题,您可以将用户添加到“docker”组,这将赋予其访问套接字所需的权限。

您可以通过运行以下命令来执行此操作:

sudo usermod -aG docker yourusername

您需要注销并重新登录才能使更改生效。之后,您应该能够使用 Podman 运行 Docker Compose 命令,而无需成为 root 用户。

相关内容