Podman実行時に「400 Bad Request」が出ています。このエラーはPodman APIまたはレジストリへのリクエスト形式が正しくないことを示しており、コマンドオプションやイメージ指定の誤りが原因です。

よくある原因

podman runコマンドのオプション指定が誤っている

podman run のオプション順序やフラグの書き方が間違っていると、Podmanはリクエストを解析できず400エラーを返します。例えば、値が必要なオプション(--name--memory など)に値を渡さない、または重複定義した場合に発生します。イメージ指定の前に全てのオプションを配置する必要があります。

イメージ名またはタグの書き方が間違っている

イメージ名やタグの形式が不正だとリクエストが成立しません。レジストリが指定されていない場合、Podmanはデフォルトレジストリから検索しますが、タグ内に無効な文字が含まれていたり、参照形式が壊れていたりするとエラーになります。

Podman APIソケットへのリクエストJSON形式が壊れている

REST APIを直接呼び出す場合、JSONペイロードの構文エラーや必須フィールドの不足があると400エラーが発生します。curlなどでAPIを叩く際にダブルクォートの閉じ忘れやカンマの欠落が原因になります。

解決手順

ステップ1:コマンドオプションの正しい書き方を確認する

# 使用しているサブコマンドのヘルプを表示
podman help run

# よく使うオプション例
podman run --name <コンテナ名> --memory 512m --cpus 1 <イメージ名>:<タグ>

podman help run でオプション一覧と説明を確認し、オプション順序やフラグの記述が正しいか検証します。イメージ指定は必ずオプション指定の後に配置してください。

ステップ2:イメージ名とタグをpodman searchで検証する

# イメージ検索でレジストリに存在するか確認
podman search alpine

# タグ付きで正確なイメージ名を指定
podman run alpine:3.18 /bin/sh

# レジストリを明示的に指定する場合
podman run docker.io/library/alpine:3.18 /bin/sh

podman search で目的のイメージがレジストリに存在し、正確なタグ名を確認します。タグが存在しない、または大文字小文字が異なっている場合も400エラーになります。

ステップ3:Podmanをバージョン確認し、必要に応じて更新する

# 現在のPodmanバージョンを確認
podman --version

# 古い場合はシステムパッケージマネージャーで更新
# Red Hat系の場合
sudo dnf update podman

# Debian系の場合
sudo apt update && sudo apt upgrade podman

古いバージョンではAPI仕様が異なり、新しいオプションが存在しないか動作が異なる可能性があります。

ステップ4:REST APIで直接呼び出す場合はJSON形式をチェック

# Podman APIソケット経由での不正なリクエスト例
curl -X POST --unix-socket /run/podman/podman.sock \
  http://localhost/v4.0.0/libpod/containers/create \
  -H "Content-Type: application/json" \
  -d '{"Image": "alpine", "Cmd": ["sh"]}'

# JSON形式の検証ツール(jq)で事前チェック
echo '{"Image": "alpine"}' | jq .

JSON形式を整形・検証してから送信してください。jq などのツールを使うとシンタックスエラーを事前に検出できます。

それでも解決しない場合

Podmanのログを詳細に確認します。--log-level=debug フラグを使うか、systemdジャーナルで詳細なエラーメッセージを見ることで、リクエストのどの部分が問題かが判明します。

# デバッグレベルでのログ出力
podman --log-level=debug run <イメージ名>

# systemdジャーナル確認
journalctl -u podman -n 50

また、コンテナレジストリの認証情報が古いか無効な場合も400エラーになります。podman logoutクレデンシャルをクリアし、必要に応じて podman login で再度認証してください。


免責事項:本記事の内容は、執筆時点の公開情報をもとに作成したものです。ソフトウェアの仕様は予告なく変更されることがあります。最新の情報は各ツールの公式サポートページをご確認ください。本記事の情報を利用した結果生じたいかなる損害についても、著者および運営者は責任を負いかねます。