ネット見てると色々やり方書いてあるのですが、"現時点(2022/8/8)"だと上手くいかないので特筆。
AlmaLinux 9 のminimalで実施。
あんまり良くないやり方のような気もするのですが、これしか上手くいく方法がなかった。
多分、ルートレス起動にしないとダメなのかしら。
結論のコマンド類まとめ(ユーザグループをrootにする版)
# update sudo dnf update -y # podmanのもろもろインストール sudo dnf install podman podman-plugins podman-docker podman-remote -y # podman本体の動作確認 podman --version podman run hello-world # docker-compose のインストール sudo curl -L https://github.com/docker/compose/releases/download/v2.8.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose # podmanのunix socketのサービス有効化 sudo systemctl enable --now podman.socket systemctl status podman.socket # リンク確認(/var/run/docker.sock: symbolic link to /run/podman/podman.sock) sudo file /var/run/docker.sock # パーミッション周り sudo usermod -aG root ${USER} sudo chmod 770 /var/run/podman # 確認(jsonの文字列が返ってくればOK) sudo curl --unix-socket /var/run/docker.sock http:/v1.41/info # .bashrcに以下を追記 export DOCKER_BUILDKIT=0 # sourceの読み込みなおし . ~/.bashrc
とりあえず、これでdocker-composeが動くようになる。
結論のコマンド類まとめ(ユーザグループ変えない版)
# update sudo dnf update -y # podmanのもろもろインストール sudo dnf install podman podman-plugins podman-docker podman-remote -y # podman本体の動作確認 podman --version podman run hello-world # docker-compose のインストール sudo curl -L https://github.com/docker/compose/releases/download/v2.8.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose # podmanのunix socketのサービス有効化 systemctl --user enable --now podman.socket # サービスの起動確認 systemctl --user status podman.socket # .bashrcに以下を追記(DOCKER_HOSTは上記statusでLISTEN:のパス) export DOCKER_BUILDKIT=0 export DOCKER_HOST=unix:///run/user/1000/podman/podman.sock # sourceの読み込みなおし . ~/.bashrc
もろもろのエラーとか
podmanとdocker-compose入れて、「sudo systemctl enable --now podman.socket」だと、docker-compose buildとかupで下記のパーミッションのエラーが出る。
Got 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%3Dwsample%22%3Atrue%7D%7D&limit=0": dial unix /var/run/docker.sock: connect: permission denied
これをやるのにdockerの場合は「sudo usermod -aG docker ${USER}」みたいにするのですが、
podmanだとそもそもこれが無いので、実行ユーザでsocketのサービスを作る。
あと、これだとデフォでdocker-composeが見てるパスと変わっちゃうので、環境変数のDOCKER_HOSTで見る先を変更する。
上記を行うとパーミッションはクリアするのですが、次は下記エラーが出る。
listing workers for Build: failed to list workers: Unavailable: connection error: desc = "transport: Error while dialing unable to upgrade to h2c, received 404"
で、これのISSUEが下記。
https://github.com/containers/podman/issues/13889
どうも、podman4からセキュアなビルドを出来るようにしたらしく、これが悪さしてる模様。
なので、docker-compose を実行するユーザで、下記の環境変数を設定する。
export DOCKER_BUILDKIT=0
常時やりたい場合は「.bashrc」とかに書いておけば良いかな?
podman3でRHEL8.6くらいは問題なかったみたいですが、最新のバージョンだと色々無理っぽい。
確実に超絶無理矢理なやり方なので、何かいい方法ないかなー。
参考: RHEL公式DOC