戻る

Docker run → Compose 変換

開発ツール

読み込み中

ツールを読み込んでいます

ツールのコードは開いたときにのみ読み込まれます。

このツールの処理はすべてブラウザー内で行われ、入力内容はサーバーへ送信されません。

このツールについて

リテラルで記述した docker run または docker container run を 1 コマンド貼り付け、単一サービスの Compose YAML 草案を作成します。入力に合わせてプレビューを更新し、コピーとダウンロードにも同じ内容を使います。環境変数値は既定ですべてマスクされ、コマンドを編集すると元の値の表示を解除します。変換はブラウザー内で完結し、コマンド実行、Docker 接続、ファイル読み取り、入力履歴の保存は行いません。使用前に警告とデプロイ設定を確認してください。

主な用途

  • 対応範囲の小さな Docker run 例を、ポートやマウントを手で書き直さずに確認可能な Compose ファイルへ移す。
  • 明示的なエントリーポイント、コマンド引数、作業ディレクトリ、ユーザー、TTY、標準入力設定の対応を確認する。
  • 環境変数値をマスクした調査用の例を用意し、引数やパスなどの可視項目も確認してから共有する。

使い方

  1. 1.POSIX 形式の Docker run を 1 コマンド貼り付け、値をリテラルで指定します。空白を含む値は引用し、行を継続する場合はバックスラッシュの直後に改行します。
  2. 2.現在の YAML、エラー、警告を確認します。非対応オプションは無視されると思わず修正してください。元の値が必要な場合を除き、環境変数のマスクを保ちます。
  3. 3.YAML をコピーするか compose.yaml をダウンロードします。プレースホルダーを安全に置き換えて他の項目も確認し、ご自身の Compose 環境で検証してからデプロイしてください。

Docker 変換の具体例

ポートを公開する Web サーバー

docker run -d --name web -p 8080:80 --restart unless-stopped nginx:alpine
services:
  app:
    container_name: "web"
    restart: "unless-stopped"
    image: "nginx:alpine"
    ports:
      - "8080:80"
    network_mode: "bridge"

YAML のサービスキーは app で、--name は container_name に対応します。引用されたポート指定でホストの 8080 とコンテナーの 80 を区別します。再起動ポリシーを保持し、-d は実行時の選択として警告し、bridge ネットワークを明示します。

環境変数のマスクと名前付きリソース

docker run --name database -e POSTGRES_PASSWORD=demo-only -e APP_MODE=first -e APP_MODE=final -v pgdata:/var/lib/postgresql/data --network app-net postgres:16
services:
  app:
    container_name: "database"
    networks:
      - "network_1"
    image: "postgres:16"
    volumes:
      - type: "volume"
        target: "/var/lib/postgresql/data"
        read_only: false
        source: "volume_1"
    environment:
      POSTGRES_PASSWORD: "[REDACTED]"
      APP_MODE: "[REDACTED]"
volumes:
  volume_1:
    name: "pgdata"
networks:
  network_1:
    name: "app-net"
    external: true

2 つの環境変数値をマスクし、元の値の表示では APP_MODE の最後の代入を使います。ボリュームは Docker 名 pgdata を保持します。app-net は既存の外部ネットワークとして必要です。データベースのデータや、このイメージの保存要件は検証しません。

読み取り専用バインドとシェルのリテラル引数

docker container run -it --mount type=bind,src=/srv/project,target=/app,readonly -w /app -u 1000:1000 --entrypoint /bin/sh alpine:3.20 -c 'printf %s "$HOME"'
services:
  app:
    stdin_open: true
    tty: true
    working_dir: "/app"
    user: "1000:1000"
    entrypoint:
      - "/bin/sh"
    image: "alpine:3.20"
    command:
      - "-c"
      - "printf %s \"$$HOME\""
    volumes:
      - type: "bind"
        target: "/app"
        read_only: true
        source: "/srv/project"
        bind:
          create_host_path: false
    network_mode: "bridge"

--mount のバインドは存在しないホストディレクトリの作成を要求しません。ユーザー、作業ディレクトリ、対話用標準入力、TTY を明示します。外側の一重引用符により $HOME をリテラルとして読み取り、Compose には $$HOME を渡してコンテナーのシェルより前の補間を防ぎます。

よくある変換ミス

  • -e NAME や --env-file を使う:シェル環境やローカルファイルは読めません。対応コマンドにリテラルの代入を明示してください。
  • --rm、--privileged、リソース上限など未対応のオプションを貼り付ける:項目を黙って消さず、変換全体をエラーにします。
  • ./data:/data や C:\data:/data を移植可能なバインドと考える:対応する Linux 絶対パスを使い、対象ホストを別途確認してください。
  • [REDACTED] のまま実行する、または元の値の出力を未確認で共有する:安全に置き換え、環境変数以外の秘密情報も確認してください。
  • 解析成功をデプロイ成功と考える:イメージ、ネットワーク、ボリューム、ホストパス、権限、Compose 互換性を別途確認してください。

制限と注意事項

  • 入力上限は 100,000 文字、2,000 シェル単語です。完全なシェルではなく、保守的な POSIX リテラルの一部に対応します。sudo、シェル展開、コマンド置換、エスケープしていない区切り、リダイレクト、パイプ、PowerShell/CMD 構文は非対応です。引用されたリテラルのドル記号は Compose 用にエスケープします。
  • 対応するのは --name、-p/--publish、-v/--volume、bind/volume の --mount、明示的な KEY=VALUE の -e/--env、--restart、--network/--net、-w/--workdir、-u/--user、--entrypoint、-d/--detach、-i/--interactive、-t/--tty です。未知のオプション、--rm、--env-file、ホスト環境変数の参照、再試行回数付きポリシーは拒否します。イメージより後はコンテナーのコマンド引数です。
  • ポートは 1–65535 で、tcp・udp・sctp、IPv4、ホスト側とコンテナー側が同じ長さの範囲に対応します。コンテナーポートのみも指定できます。IPv6、ポート 0、空のホストポート形式は非対応です。host または none ネットワークとポート公開は併用できません。
  • バインド元には Linux の絶対パスが必要です。相対パスと Windows ドライブパスは拒否します。名前付きボリュームは対応文字で 2 文字以上とし、匿名ボリュームも使えます。マウント先は / 以外の絶対パスにしてください。--mount は type、source/src、target/dst/destination、readonly/ro のみで、CSV 引用符内のカンマや高度な設定は解析しません。 ネットワークを指定しない場合は network_mode: bridge を明示します。名前付きネットワークは外部ネットワークとなり、名前付きボリュームには Compose のプロジェクト接頭辞を付けず元の Docker 名を保持します。Docker リソース、イメージの既定設定、実行権限、プラットフォーム互換性は検証できません。
  • プレビューと出力では、空値を含むすべての環境変数値をマスクします。元の入力、変数名、コマンド引数、イメージ名、マウントパス、その他の項目は隠しません。秘密情報の完全な検出ではなく、マスク済みの草案はそのままデプロイできません。

よくある質問

なぜ YAML に bridge ネットワークが書かれるのですか?

ネットワーク未指定の Docker run は既定のブリッジを使いますが、Compose は通常プロジェクトネットワークを作成します。変換では元の選択を保つため network_mode: bridge を書き出します。サービス名による検出やプロジェクト専用ネットワークが必要なら、意図を確認して変更してください。

環境変数の重複や秘密情報はどう扱いますか?

同じ変数への重複代入は最後の値を採用し、警告を表示します。既定の YAML は全環境変数値をマスクします。元の値を表示するとプレビュー・コピー・ダウンロードに含まれ、コマンドを編集するとマスクに戻ります。他の項目の秘密情報は手動で確認してください。

既存のボリュームやネットワークの名前は変わりますか?

名前付きボリュームの Compose キーは生成しますが、name プロパティで元の Docker 名を保持します。存在しない名前付きボリュームは Compose が作成する場合があり、既存データは検査しません。名前付きネットワークは external として事前の存在が必要です。バインドは、元の -v と --mount によるホストディレクトリ自動作成の違いを保ちます。 これらは external ではなく Compose 管理のボリュームなので、docker compose down -v で削除される可能性があります。データをバックアップし、管理コマンドを確認してください。

-d と entrypoint はなぜ特別に扱われますか?

バックグラウンド実行は起動時の選択なので、-d はサービスの項目ではなく警告になります。明示的な entrypoint はリストで出力し、コマンドがなければイメージの既定 CMD を空にします。イメージの後のコマンド引数は空引数を含めてリストで保持します。

関連ツール