docker run → Docker Compose 変換ツール(compose.yaml 作成)
docker run のコマンドを貼るだけで compose.yaml に変換。ポート・環境変数・ボリューム・ネットワーク・ヘルスチェック・GPU など docker run の全オプションを読み取り、複数のコマンドを1つのファイルにまとめます。$(pwd) や $ の書き換え、Compose に無いオプションも知らせます。
複数のコマンドは改行で区切ります(行末の \ ・ ` ・ ^ で続く行も読めます)。docker network create と docker volume create も読み取ります。
compose.yaml
docker run のコマンドを入力すると、ここに compose.yaml が表示されます。
使い方
- 「docker run のコマンド」に、変換したい
docker runのコマンドを貼り付けます。README や手順書のコマンドを、行末の\ごとそのまま貼ってかまいません - 下の「compose.yaml」に変換結果がその場で表示されます。「コピー」か「compose.yaml を保存」で取り出します
- 「確認してほしいこと」に、Compose に書けなかったオプションや、書き換えた箇所の説明が出ます。目を通してから使ってください
- compose.yaml をコマンドを実行していたフォルダに置き、
docker compose up -dで起動します
複数のコマンドは改行で区切って貼ると、1つの compose.yaml の別々のサービスになります。docker network create と docker volume create の行も読み取り、ネットワークとボリュームの定義に入れます。docker pull や cd などほかのコマンドは飛ばして、飛ばしたことを知らせます。
「例を入れる」を押すと、PostgreSQL と nginx を同じネットワークで動かす例が入ります。入力したコマンドはブラウザの外へ送信されず、保存もされません。
具体例
次の3つのコマンドを貼ると、
docker network create app-net
docker run -d --name db --network app-net \
-e POSTGRES_PASSWORD=example \
-v pgdata:/var/lib/postgresql/data \
--health-cmd "pg_isready -U postgres" --health-interval 10s \
--restart unless-stopped postgres:17
docker run -d --name web --network app-net -p 8080:80 \
-v "$(pwd)/html:/usr/share/nginx/html:ro" \
--restart unless-stopped nginx:1.27
次の compose.yaml になります。
services:
db:
image: postgres:17
container_name: db
restart: unless-stopped
environment:
POSTGRES_PASSWORD: example
volumes:
- pgdata:/var/lib/postgresql/data
networks:
- app-net
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: "10s"
web:
image: nginx:1.27
container_name: web
restart: unless-stopped
ports:
- "8080:80"
volumes:
- "./html:/usr/share/nginx/html:ro"
networks:
- app-net
volumes:
pgdata:
name: pgdata
networks:
app-net: {}
$(pwd)/htmlは、compose.yaml の場所から数えた./htmlになりますpgdataにはname: pgdataが付きます。これが無いと、Compose は「プロジェクト名_pgdata」という別のボリュームを作るので、docker run のときのデータベースが空に見えますdocker network createで作っていたapp-netは、Compose が作るネットワークとして定義します-dは compose.yaml には書かず、docker compose up -dで指定することを「確認してほしいこと」で知らせます
対応しているオプション
docker run の全オプション(隠しオプションの --net・--net-alias・--dns-opt を含む)を読み取ります。主な対応は次のとおりです。
- ポート・環境:
-p→ports、--expose→expose、-e→environment、--env-file→env_file、-l→labels、--label-file→label_file、--annotation→annotations - 実行するもの: イメージの後ろの引数 →
command、--entrypoint→entrypoint、-u→user、-w→working_dir、--platform→platform、--pull→pull_policy - 起動のしかた:
--restart→restart、--init→init、-t→tty、-i→stdin_open、--privileged、--read-only→read_only、--stop-signal→stop_signal、--stop-timeout 30→stop_grace_period: "30s" - 保存場所:
-v→volumes(短い書き方)、--mount→volumes(長い書き方)、--tmpfs→tmpfs、--volumes-from→volumes_from、--shm-size→shm_size、--storage-opt→storage_opt - ネットワーク:
--network→networksかnetwork_mode(host・none・bridge・container:名前)、--network-alias・--ip・--ip6・--link-local-ip・--mac-address→ ネットワークごとの設定、--add-host→extra_hosts、--dns・--dns-search・--dns-option、--link→links、-h→hostname - ヘルスチェック:
--health-cmd→test: ["CMD-SHELL", ...]、--health-interval・--health-timeout・--health-retries・--health-start-period・--health-start-interval、--no-healthcheck→disable: true - 資源の制限:
-m→mem_limit、--memory-reservation、--memory-swap→memswap_limit、--cpus、-c→cpu_shares、--cpuset-cpus→cpuset、--pids-limit、--ulimit nofile=1024:65536→softとhard、--blkio-weightと--device-read-bpsなど →blkio_config、--gpus→deploy.resources.reservations.devices - 権限・名前空間:
--cap-add・--cap-drop・--security-opt・--device・--group-add・--sysctl・--ipc・--pid・--uts・--userns→userns_mode・--cgroupns→cgroup、--log-driver・--log-opt→logging
値の形が決まっているオプション(--restart、-p、--ulimit、メモリの大きさ、ヘルスチェックの時間など)は、書き方がおかしいと「注意」を出します。
$ と変数の書き換え
Compose は compose.yaml の中の $ を変数として読むので、変換のときに書き換えます。
'a$b'のように一重引用符で囲んだ$は、コンテナにそのまま渡る文字なので$$にします。sh -c 'echo $HOME'は["sh", "-c", "echo $$HOME"]になり、コンテナの中ではecho $HOMEとして実行されます"$HOME"や${PORT:-8080}のようにシェルが展開していた変数は、${HOME}・${PORT:-8080}のまま残します。docker compose を実行したときの環境変数か、同じフォルダの.envファイルの値が入ります$(pwd)・$PWD・`pwd`(bash)、${PWD}(PowerShell)、%cd%(コマンドプロンプト)でパスが始まるときは、.に置き換えます$(date)のように、シェルでしか計算できない書き方はそのまま残し、「注意」で書き換えを促します
コマンドの書き方は、行末の ` や $env: があれば PowerShell、行末の ^ や %cd%・%USERPROFILE% があればコマンドプロンプト、行末が \ なら bash、C:\Users のような Windows のパスがあれば PowerShell、それ以外は bash として自動で判定します。判定が違うときは「コマンドの書き方」で選び直してください。PowerShell とコマンドプロンプトでは、Windows のパスの \ をそのまま読みます。
Compose に書けないオプション
次のオプションは compose.yaml に当たる設定が無いので、書き出さずに理由を知らせます。
-d:docker compose up -dで指定します--rm:docker compose downでコンテナは削除されます。1回だけ動かすならdocker compose run --rm サービス名を使います-P: 公開するポートをportsに1つずつ書きます--cidfile、--umask、--cpuset-mems、--volume-driver、--kernel-memory(廃止)、Windows 専用の--io-maxbandwidth・--io-maxiops-a、--sig-proxy、--detach-keys、-qなどの端末や表示に関するオプション
FAQ
サービス名はどう決まりますか?
--name があればその名前(小文字にし、使えない文字は - にします)、無ければイメージ名の最後の部分です。ghcr.io/acme/api-server:2.1 なら api-server です。同じ名前が続くときは nginx-2 のように番号を付けます。
version: "3.8" は書かないのですか?
書きません。今の Docker Compose では version は使われておらず、書くと「obsolete」という警告が出ます。
ほかのコンテナを参照するオプションはどうなりますか?
--network container:db、--volumes-from db、--link db、--pid container:db、--ipc container:db の db が、同じ入力の中で --name db を付けたコンテナなら、サービス名での参照(network_mode: service:db など)に書き換えます。入力の外のコンテナなら、container:db のまま残します。
docker network create を貼らなかったネットワークはどうなりますか?
docker run --network 名前 は、作成済みのネットワークにしかつなげません。そのため、入力の中で作っていないネットワークは external: true(作成済みのネットワークを使う)にします。Compose に作らせたいときは external: true の行を消してください。
--env-file のファイルはそのまま使えますか?
たいていは使えますが、Compose の env_file は値の引用符を外し、${...} を展開します。docker run --env-file はどちらもしません。値に引用符や $ があるときは、env_file を - path: ./app.env と format: raw の形で書くと、docker run と同じに読まれます。
変換した compose.yaml はそのまま動きますか?
docker run のときと同じ設定になるように変換していますが、相対パスの起点や名前付きボリュームの名前など、環境によって違う点があります。「確認してほしいこと」に目を通し、docker compose config で読み込めることを確かめてから起動してください。
入力したコマンドは保存されますか?
いいえ。変換はすべてブラウザ内で行い、入力したコマンドを送信したり保存したりしません。パスワードなどを含むコマンドでも外には出ませんが、compose.yaml を共有するときは値を確かめてください。ページを再読み込みすると消えます。
- 種別
- ユーティリティ
- カテゴリ
- 開発者向け
- タグ
- docker
- docker-compose
- compose
- yaml
- container
- converter
- developer
関連アプリ

カラーコード変換ツール
HEX・RGB・HSL のカラーコードを相互に変換し、HSV・CMYK・OKLCH の表記も表示。カラーピッカーやプレビューで確認でき、白・黒や指定した文字色とのコントラスト比(WCAG)も分かります。

Markdown表作成ツール
ExcelやスプレッドシートのセルをコピーしてMarkdownの表に変換します。表の上でセルを編集し、列の左・中央・右揃え、行や列の追加・入れ替え・並べ替えができます。全角文字の幅を数えて縦線をそろえ、既存のMarkdownの表の整形や、Excelへの貼り戻しにも使えます。

CSV⇔JSON変換ツール
CSV(カンマ区切り)やTSV(タブ区切り)とJSONを相互に変換します。Excelやスプレッドシートの表をJSONにしたり、JSONの配列を表に戻したりできます。入れ子のJSONは address.city のような列に展開します。結果は、Excelで文字化けしないCSVファイルとしてダウンロードできます。


