🐳

Podman Desktop(Windows)のコンテナを docker コマンドで操作する

2024/09/16に公開

Docker Desktop の代替として Podman Desktop を利用する際、docker コマンドではなく podman コマンドを使ってコンテナ等を操作しなければなりません。
しかし、コンテナを扱うガイドは docker コマンドを前提としたものがほとんどで、docker コマンドを都度 podman コマンドに読み替える必要があるのは少し面倒です。

本記事では Podman Desktop を docker コマンドで操作できるようにする方法を紹介します。

docker cli のインストール

最新の docker cli を以下のページからダウンロードします。
※ 以下のリンクは Windows (x64) 向けです

https://download.docker.com/win/static/stable/x86_64/

zip ファイルを解凍し docker.exepodman コマンドが存在する C:\Program Files\RedHat\Podman\ 配下に配置します。dockerd.exe は不要です。

楽をするため Podman Desktop インストール時点でパスが通っている C:\Program Files\RedHat\Podman\ を利用しました。他のフォルダに docker.exe を配置してパスを通す方法でも問題ありません。

docker compose のセットアップ

docker compose コマンドを使えるようにします。

まずは、Settings > Resources から Compose の Setup を押下し、ウィザードに従ってインストールします。


https://podman-desktop.io/docs/compose/setting-up-compose

Compose をセットアップしただけではまだ dockercompose サブコマンドは使えません。docker コマンドが docker-compose.exe を Docker CLI Plugin として認識する必要があります。

Docker CLI Plugin については以下の記事が詳しいです。
https://zenn.dev/miroha/articles/docker-cli-plugin

docker-compose.exe%USERPROFILE%\.docker\cli-plugins に配置することで Docker CLI Plugin として認識されます。しかし、docker-compose.exe のバージョンアップなどは Podman Desktop に任せたいため、実体を配置するのではなく docker-compose.exe へのシンボリックリンクを配置するようにします。

管理者権限で PowerShell を起動し、以下のコマンドを実行します。

# cli-plugins フォルダの作成
New-Item -Path "$Env:USERPROFILE\.docker\cli-plugins" -ItemType Directory -Force
# cli-plugins 配下へのシンボリックリンクの作成(管理者権限が必要)
New-Item -ItemType SymbolicLink -Path "$Env:USERPROFILE\.docker\cli-plugins\docker-compose.exe" -Target "$Env:LOCALAPPDATA\Microsoft\WindowsApps\docker-compose.exe"

これで docker compose コマンドが使えるようになります。

❯ docker compose version
Docker Compose version v2.29.0

BUILD_KIT の無効化

Docker の BuildKit のイメージビルド方式と、WSL のネットワークの相性が悪いらしく、docker compose のイメージビルドが途中で固まってしまうことがあります。
筆者の環境では dev container を docker compose で起動すると必ず起きていました。

関連する issue: Running docker compose leads to docker socket unvailable and WSL stuck · Issue #20379 · containers/podman

以下の環境変数を設定して BuildKit を無効化することで、この問題を回避します。

DOCKER_BUILDKIT=0

ちなみに、docker compose に相当する podman composedocker-compose.exe のラッパーとして機能しますが、docker-compose.exe を呼び出すときに暗黙のうちに DOCKER_BUILDKIT=0 が設定されるようになっています。

https://github.com/containers/podman/blob/v5.2.2/cmd/podman/compose.go#L159-L164

参考にした記事

以下の記事を参考にさせて頂きました。

GitHubで編集を提案

Discussion