Docker Compose가 포함된 Podman - 사용자로 실행하시겠습니까?

Docker Compose가 포함된 Podman - 사용자로 실행하시겠습니까?

Podman을 사용 하려고 합니다 docker-compose.이것이제 지원됩니다. 지침을 실행하면 루트로 실행하면 소켓이 작동하지만 사용자로 실행하면 다음과 같은 결과가 나타납니다.

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아니면 루트여야 합니까?

편집하다

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

컬 명령은 위 블로그 게시물에서 테스트되었습니다. 루트로는 작동하지만 사용자로는 작동하지 않습니다.

[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. systemctl enable podmanPodman 을 실행하도록 설정한 경우 systemctl disable --now podman podman.socket. 이전에 설치한 경우 에서 까지의 소프트 링크가 podman-docker더 이상 루트에서 실행되지 않으므로 이제 끊어지는 것을 알 수 있습니다./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

예, 사용자 권한을 통해 Docker Compose와 함께 Podman을 사용할 수 있습니다. 표시되는 오류 메시지는 명령을 실행 중인 사용자에게 Docker 데몬 소켓에 액세스할 수 있는 권한이 없음을 나타냅니다. 이 문제를 해결하려면 사용자를 "docker" 그룹에 추가하면 소켓에 액세스하는 데 필요한 권한이 부여됩니다.

다음 명령을 실행하여 이 작업을 수행할 수 있습니다.

sudo usermod -aG docker yourusername

변경 사항을 적용하려면 로그아웃했다가 다시 로그인해야 합니다. 이후에는 루트가 아니더라도 Podman을 사용하여 Docker Compose 명령을 실행할 수 있습니다.

관련 정보