Podmanを使用しようとしていますdocker-compose
。これこれでサポートされます。指示を実行すると 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
それともルートでなければなりませんか?
編集する
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を設定する必要があります。
systemctl enable podman
Podmanを実行するように設定した場合systemctl disable --now podman podman.socket
。以前にインストールした場合は、からのソフトリンクがpodman-docker
ルートで実行されなくなりました。/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
はい、ユーザー権限を使用してDocker ComposeでPodmanを使用できます。表示されるエラーメッセージは、コマンドを実行しているユーザーにDockerデーモンソケットにアクセスする権限がないことを示します。この問題を解決するには、ユーザーを「docker」グループに追加すると、ソケットにアクセスするために必要な権限が付与されます。
次のコマンドを実行してこれを実行できます。
sudo usermod -aG docker yourusername
変更を適用するには、ログアウトして再度ログインする必要があります。その後、ルートでなくてもPodmanを使用してDocker Composeコマンドを実行できます。