OpenWrt Dockerイメージのインポート手順
1. 一時ディレクトリの作成とファイルの解凍
# 一時ディレクトリの作成
mkdir -p /tmp/openwrt-workspace
# OpenWrtルートファイルシステムを解凍
tar -xzf /path/to/openwrt-rootfs.tar.gz -C /tmp/openwrt-workspace
2. Dockerイメージとしてパッケージ化
# 解凍ディレクトリに移動
cd /tmp/openwrt-workspace
# ファイルを圧縮
tar -czf openwrt-container.tar.gz *
3. Dockerへのインポートと確認
# Dockerイメージとしてインポート
docker import openwrt-container.tar.gz my-openwrt:latest
# イメージの確認
docker images | grep my-openwrt
問題の根本原因分析
以下の2つの主要問題が特定されました:
- Dockerイメージビルドの異常:インポートされたイメージサイズが0Bであることから、有効なファイルが含まれていないことが示唆されます。
- Nginx起動パラメータの誤り:ログに表示されるnginx: invalid option: "off:"は、-gパラメータで誤った記号が使用されていることを証明しています(正しくはoff;)。
解決策
1. OpenWrtイメージビルドプロセスの修正
現在のイメージビルドが失敗している原因は解凍パスの誤りとパッケージングコマンドの不完全さです。以下の手順で修正してください:
# 1. 一時ディレクトリの作成とファイル解凍
mkdir -p /tmp/openwrt-temp
tar -xzf /path/to/openwrt-rootfs.tar.gz -C /tmp/openwrt-temp
# 2. Dockerイメージとしてパッケージ化
cd /tmp/openwrt-temp
tar -czf openwrt-docker.tar.gz *
# 3. Dockerへのインポートと確認
docker import openwrt-docker.tar.gz my-openwrt:custom
docker images | grep my-openwrt
2. 適切なコンテナ起動コマンドの設定
1Panelでコンテナを作成する際の設定:
- イメージ名:
my-openwrt:custom - コマンド:
/sbin/init - ネットワークモード: Host
- 特権モード: 有効にする
3. Nginxパラメータ形式の修正
コンテナでNginxを実行する場合、Commandフィールドを以下のように修正してください:
nginx -g 'daemon off;' # 英文セミコロンを使用
4. イメージの完全性の検証
一時コンテナを使用して/sbin/initの存在を確認:
docker run -it --rm my-openwrt:custom ls -l /sbin/init
- ✅ ファイルパスが出力される → イメージ正常
- ❌ "No such file"が出力される → 公式イメージ
openwrtorg/rootfs:x86_64を使用
主要設定のまとめ
| 設定項目 | 正しい値 | 誤った例 |
|---|---|---|
| 解凍パス | /path/to/correct/location |
/wrong/path/location |
| パッケージングコマンド | tar -czf |
tar -cf |
| Command | nginx -g 'daemon off;' または /sbin/init |
off: または 空白 |
| 特権モード | 有効 | 無効 |
操作の検証
1. イメージサイズの正常確認
docker images | grep my-openwrt # 予想サイズ > 100MB
2. コンテナ起動と状態確認
docker run -d --name my-openwrt --privileged --network host my-openwrt:custom /sbin/init
docker ps | grep my-openwrt # 状態が"Up"であることを確認
追加の推奨事項
- 公式イメージの優先使用:
docker pull openwrtorg/rootfs:x86_64 - 無効なイメージのクリーンアップ:
docker rmi my-openwrt:custom # 0Bイメージを削除
問題が解決しない場合は、以下の情報を提供してください:
docker inspect my-openwrt:customの出力- 1Panelコンテナ設定画面のスクリーンショット