我正在尝试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 设置为以用户身份运行。
- 如果您已经将 podman 设置为运行,
systemctl enable podman
则需要使用 来反转它systemctl disable --now podman podman.socket
。如果您之前安装过,您会注意到从到 的podman-docker
软链接现在将被破坏,因为现在不再在 root 下运行/var/run/docker.sock
/run/podman/podman.sock
podman
- 接下来,您需要设置 podman 以使用用户服务
systemctl enable --now --user podman podman.socket
。这将在 处创建一个套接字/run/user/1000/podman/podman.sock
。请注意,该套接字由用户拥有。看这里有关用户服务的更多详细信息。 TLDR:它不是在系统启动时运行该服务,而是在用户登录时运行该服务。 - 最后,我们需要将
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 用户。