docker run→compose変換でできること
docker run のコマンドを貼るだけで docker-compose.yml を作ります。手元のコンテナを compose 管理に移すときの下書きに使えて、反映できなかったオプションは一覧で確認できます。
使い方
- 「docker run コマンド」の欄にコマンドを貼ります。\ で続く複数行やクオートもそのまま貼れます。試すだけなら「例: Web」「例: DB」「例: 未対応あり」を押します。
- 右の docker-compose.yml が入力に合わせて更新されます。ポートや特殊文字を含む値は自動でクオートされます。
- 「反映できなかったオプション」と「確認してほしいこと」を読み、必要なら手で直します。
- 「YAMLをコピー」でコピーし、docker compose config で確認してから使います。
計算の仕組みと注意点
- 出力は Compose Specification の形式で、version キーは書きません。サービス名は --name、なければイメージ名から作ります。
- -p、-v、--mount、-e、--env-file、--name、--restart、--network、-w、-u、--entrypoint、-l、--hostname、--add-host、--cap-add、--device、--memory、--cpus、-i、-t、ヘルスチェック、ログ設定などに対応しています。-d と --rm は compose に書かないので「確認してほしいこと」に出ます。
- イメージより後ろの語は command に、--entrypoint は entrypoint に配列で書きます。独自の --network は既存のものとして external: true にします。
- シングルクオート内の $ のようにシェルが展開しない $ は、compose で展開されないよう $$ に変えます。$(pwd) などは . に置き換えます。それ以外の $(…) は compose では実行されないので注意が表示されます。
- 知らないオプションは値を取るかどうか判定できないため、イメージ名の取り違えがないか確認してください。入力はブラウザの中だけで処理し、送信しません。
よくある質問
docker run の -d は docker-compose.yml のどこに書きますか?
書きません。起動時に docker compose up -d で指定します。-d を含むコマンドを貼ると「確認してほしいこと」に同じ説明が出ます。
ポート番号はなぜクオートするのですか?
YAMLでは 22:22 のような値が60進数の数値として読まれる場合があるためです。このツールは ports を常にダブルクオートで出力します。
docker run で使っていた名前付きボリュームのデータは引き継がれますか?
そのままでは引き継がれません。compose は「プロジェクト名_ボリューム名」という別の名前で作ります。引き継ぐなら、トップレベル volumes の該当ボリュームに external: true を足してください。
-P や --cidfile はなぜ変換されないのですか?
compose に対応するキーがないためです。黙って捨てず「反映できなかったオプション」に理由つきで表示します。「例: 未対応あり」で表示を確かめられます。