DockerのインストールとDockerからのn8nの実行(環境づくりまで)

DockerをローカルPCにインストール(忘備録)

Docker Desktop Installer https://www.docker.com/ja-jp/products/docker-desktop/

プロンプト:AI agentつかうため Dockerをインストールしようと思うんだけど、AMD と ARMってどっち選べばいい?

ChatGPT 5: ナイス判断✨ AIエージェント動かすならDocker環境が一番安定するね。


🧠 まず確認!

Dockerの選択肢で重要なのは CPUアーキテクチャ です。
ここでの正しい用語は:

  • AMD64 (または x86_64) → 通常のWindowsやIntel/AMD製CPU搭載PC向け
  • ARM64 (または aarch64) → Apple Silicon(M1/M2/M3)やRaspberry PiなどARM系CPU向け

💻 あなたの場合(Windows PCなら)

おそらくTohoの研究室PCやノートPCは AMD RyzenIntel Core i 系だと思うので、
「AMD64」版(=x86_64)」を選べばOK。

これが一般的なWindows向けのDocker Desktopです。


🍎 もしMac(M1/M2/M3)なら

ARM64版 を選ぶ。
Docker Desktop for Macは自動でApple SiliconかIntelかを検出してくれるけど、手動で選ぶならARMを。


✅ まとめ

環境 選ぶべきアーキテクチャ
Windows (Intel / AMD CPU) AMD64
Mac (Intel) AMD64
Mac (M1/M2/M3) ARM64
Raspberry Pi ARM64

 

上記によって、とりあえず自分のノートPC(ウインドウズ11)にドッカーをインストールできました。どっか‐を開けますが、じゃあこのあt何するの?で行き詰りました。

n8nをDockerから起動する(忘備録)

n8nをDockerから起動する方法を訊いたところ

docker run -it –rm -p 5678:5678 -v %USERPROFILE%\.n8n:/home/node/.n8n n8nio/n8n

とコマンドウインドウで打つのだそうです。試してみたところこんなエラーに:

docker: Error response from daemon: Docker Desktop is unable to start

訊いてみたら、%USERPROFILE% は自分のPCのユーザーネームに置き換えないとだめでした。

%USERPROFILE% というのは、Windows の 環境変数 の一つで、
あなたの個人アカウントのユーザーフォルダ(ホームディレクトリ)を指す ショートカット名

何に置き換えればいいかを知る方法はコマンドウインドウで

echo %USERPROFILE%

と打てば教えてくれて、自分の場合

C:\Users\note

でした。なのでさっきの %USERPROFILE% の部分を C:\Users\note に置き換えて再度試してみます。

docker run -it –rm -p 5678:5678 -v C:\Users\note\.n8n:/home/node/.n8n n8nio/n8n

やはり同じエラー。

ydocker: Error response from daemon: Docker Desktop is unable to start

ChatGPT5 いわく、別にDockerを使わなくてもn8nは動かせるのだそうです。そういうのならと試しにやってみます。

管理者 PowerShell で:

# Node が無ければ https://nodejs.org から LTS を入れて再起動
node –version
npm –version

# n8n を即起動(ブラウザ http://localhost:5678)
npx n8n

Windows PowerShellで

node –version

と打つと、

node : 用語 ‘node’ は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。

というエラーになりました。つまりnodeというソフトがインストールされていないということのようです。

どこでもJavaScriptを使おうNode.js®はクロスプラットフォームに対応したフリーでオープンソースのJavaScript実行環境です。開発者にサーバー、ウェブアプリ、コマンドラインツール、スクリプトなどを開発する環境を提供します。Node.js®を入手 https://nodejs.org

https://nodejs.org からダウンロードしてインストールしておきます。node-v22.21.0-x64 という実行ファイルをダウンロードして実行しました。多分、ここでPCを再起動しないと認識されないと思うので再起動します。さて今度は、

PS C:\WINDOWS\system32> node –version
v22.21.0

と無事にバージョンが確認できました。ところが、npmも同様に試すと

PS C:\WINDOWS\system32> npm –version
npm : このシステムではスクリプトの実行が無効になっているため、ファイル C:\Program Files\nodejs\npm.ps1 を読み込むことが
できません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してくだ
さい。

というエラーに。

ChatGPT5:

うんうん👍 それはよくある PowerShell のセキュリティ設定(スクリプト実行ポリシー)によるブロックだよ。
Node.js そのものはちゃんと入ってるけど、PowerShell が npm.ps1 を「危険なスクリプト」と誤認して止めてる状態。

 

ChatGPT5に言われたとおりにしてみたら、

PS C:\WINDOWS\system32> Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (https://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は “N”): y
PS C:\WINDOWS\system32>

PS C:\WINDOWS\system32> npm –version
10.9.4

今度はばっちりでした。

ChatGPT5:

おおっ✨ 完璧じゃん!👏
npm v10.9.4 出てるから Node.js まわりはもうバッチリ整ったね。

これで次のステップ(たとえば n8n のインストールCrewAI+フロントエンド統合)も自由自在にできるよ。

 

PS C:\WINDOWS\system32> n8n start
n8n : 用語 ‘n8n’ は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。
名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください

 

ChatGPT:

ナイス行動力✨
そのエラーメッセージは単純に n8n がまだインストールされていない だけだね。
n8n start は Node グローバル環境にインストール済みじゃないと動かない。

ただ、あなたは 「Docker で動かしたい」 から、Node 側で n8n を入れる必要はないの。
以下の手順をやれば、最速で n8n が Docker 上で動くよ👇

ナイス行動力✨
そのエラーメッセージは単純に n8n がまだインストールされていない だけだね。
n8n start は Node グローバル環境にインストール済みじゃないと動かない。

ただ、あなたは 「Docker で動かしたい」 から、Node 側で n8n を入れる必要はないの。
以下の手順をやれば、最速で n8n が Docker 上で動くよ👇


🚀 ステップ1:作業フォルダを作成

例:

mkdir C:\n8n
cd C:\n8n

🚀 ステップ2:docker-compose.yml を作成

メモ帳で新規作成して、以下を貼り付けて保存(ファイル名は docker-compose.yml

version: "3.8"

services:
  postgres:
    image: postgres:15-alpine
    environment:
      POSTGRES_USER: n8n
      POSTGRES_PASSWORD: n8n
      POSTGRES_DB: n8n
    volumes:
      - n8n_db:/var/lib/postgresql/data

  n8n:
    image: n8nio/n8n:latest
    ports:
      - "5678:5678"
    environment:
      DB_TYPE: postgresdb
      DB_POSTGRESDB_HOST: postgres
      DB_POSTGRESDB_PORT: 5432
      DB_POSTGRESDB_DATABASE: n8n
      DB_POSTGRESDB_USER: n8n
      DB_POSTGRESDB_PASSWORD: n8n
      N8N_BASIC_AUTH_ACTIVE: "true"
      N8N_BASIC_AUTH_USER: admin
      N8N_BASIC_AUTH_PASSWORD: change_me
      TZ: Asia/Tokyo
    volumes:
      - n8n_data:/home/node/.n8n
    depends_on:
      - postgres

volumes:
  n8n_data:
  n8n_db:

🚀 ステップ3:Docker Composeで起動

PowerShellで👇を実行:

docker compose up -d

✅ ステップ4:起動確認

ブラウザで:
👉 http://localhost:5678

ログイン画面が出たら成功!
ユーザー名:admin
パスワード:change_me


💡 補足

  • 停止したいとき:
    docker compose down
    
  • ログを見たいとき:
    docker compose logs -f n8n
    

これで Docker 版 n8n の最短起動ができるよ。
(Node 側の n8n start は不要で、むしろ混乱の元だから入れなくてOK)


希望すれば、次に CrewAI と n8n を連携(n8nのworkflowからCrewAIのPythonを叩く) の構成例も作るよ。やってみる?

疑問:docker-compose.yml のファイルはどのフォルダ内に置けばいいの?

ChatGPT5: すごく良い質問!✨ これは Docker を初めて触る人が最初に迷うポイントなんだよね。 ✅ 基本ルール docker-compose.yml は、 👉 そのプロジェクト(サービス)専用のフォルダ直下 に置くのが正解。 たとえば、今回は「n8nを動かすだけ」の目的だから、 Windows の場合はこうしておくのが一番シンプル👇

C:\
└─ n8n\
└─ docker-compose.yml ← これ!

PS C:\WINDOWS\system32> cd C:\n8n
PS C:\n8n> docker compose up -d
time=”2025-10-25T12:30:56+09:00″ level=warning msg=”C:\\n8n\\docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion”
unable to get image ‘postgres:15-alpine’: error during connect: Get “http://%2F%2F.%2Fpipe%2FdockerDesktopLinuxEngine/v1.51/images/postgres:15-alpine/json”: open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified.
PS C:\n8n>

ChatGPT5: エラーは2点だけ👍

  1. version 警告は無視可(削除推奨)。
  2. 本質は Docker エンジンが起動していない(daemonに接続できない)。

まずエンジンを起動する(Windows)

  1. スタートメニュー → Docker Desktop を起動
    → 右下トレイのクジラが「Docker Desktop is running」になるまで待つ。
    (コマンドで起動したい場合)

    Start-Process "C:\Program Files\Docker\Docker\Docker Desktop.exe"
    
Dockerデスクトップ版を起動させたら、
WSL needs updating
Your version of Windows Subsystem for Linux (WSL) is too old.
というメッセージがでました。
PS C:\n8n> wsl –update
インストール中: Linux 用 Windows サブシステム
Linux 用 Windows サブシステム はインストールされました。

なぜかこんどは、Dockerデスクトップが起動できなくなりました。なんで??

PS C:\n8n> docker version
Client:
Version: 28.5.1
API version: 1.51
Go version: go1.24.8
Git commit: e180ab8
Built: Wed Oct 8 12:19:16 2025
OS/Arch: windows/amd64
Context: desktop-linux
Error response from daemon: Docker Desktop is unable to start
PS C:\n8n>

なにかおかしなことが起きてますね。とりあえずPCを再起動してみます。

良かった!PCを再起動したら、Dockerデスクトップが普通に起動しました。

 

  1. 状態確認:
    docker version
    docker info
    

     

上のコマンドを実行してみました。

PS C:\WINDOWS\system32> docker version
Client:
Version: 28.5.1
API version: 1.51
Go version: go1.24.8
Git commit: e180ab8
Built: Wed Oct 8 12:19:16 2025
OS/Arch: windows/amd64
Context: desktop-linux

Server: Docker Desktop 4.49.0 (208700)
Engine:
Version: 28.5.1
API version: 1.51 (minimum version 1.24)
Go version: go1.24.8
Git commit: f8215cc
Built: Wed Oct 8 12:17:24 2025
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.7.27
GitCommit: 05044ec0a9a75232cad458027ca83437aae3f4da
runc:
Version: 1.2.5
GitCommit: v1.2.5-0-g59923ef
docker-init:
Version: 0.19.0
GitCommit: de40ad0
PS C:\WINDOWS\system32>

  1. ここで Client/Server 両方が表示されればOK(以降のコマンドが通ります)。

もし起動しない/権限系で止まる場合だけ、サービスを手動起動:

Get-Service com.docker.service
Start-Service com.docker.service

さらにWSLの状態確認(WSL2バックエンドが必要):

wsl --status
wsl -l -v

docker-desktop / docker-desktop-data が表示されていなければ、Docker Desktopを一度完全終了→再起動。
WSLが未導入なら:

wsl --install
wsl --update

を実行後、再起動→Docker Desktop起動。

どうやら自分の場合、WSLがなかったみたいなので wsl –installからやることにしました。Ubuntuがダウンロードされてますね。ウインドウズOS上でUbuntuを走らせる環境をつくろうとしているみたいです。

疑問:Docker Desktopって、ウインドウズOS上でのUbuntuの仮想環境構築のことだったの?

グーグル検索結果(AI による概要):

いいえ、Docker DesktopはWindows/macOS上でDocker環境を構築・利用するためのツールであり、仮想環境そのものではありません。Dockerは、OSを共有する「コンテナ型仮想化」という技術で、仮想マシン(VM)よりも軽量にアプリケーションの実行環境を構築できます。WindowsのWSL (Windows Subsystem for Linux) などと連携し、その上でLinuxディストリビューションであるUbuntuなどのコンテナを作成・実行します。
  • Docker Desktop: WindowsやmacOS上でコンテナを管理・実行するためのアプリケーションです。専用の管理画面を持ち、コンテナの停止や再開などが可能です。
  • 仮想環境: コンテナは仮想マシンと異なり、ホストOSのカーネルを共有する「コンテナ型仮想化」を採用しています。そのため、完全な仮想マシンよりも軽量に動作します。
  • Ubuntuとの関係: Docker Desktopを使って、Ubuntuをベースにしたコンテナを作成・実行できます。Windows上でUbuntuの環境を開発・実行する際によく利用されます。 

 

 


docker-compose.yml を軽く手直し(version行を削除)

C:\n8n\docker-compose.yml を次の内容に置き換え(先頭の version: を削除しただけ):

services:
  postgres:
    image: postgres:15-alpine
    environment:
      POSTGRES_USER: n8n
      POSTGRES_PASSWORD: n8n
      POSTGRES_DB: n8n
    volumes:
      - n8n_db:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD", "pg_isready", "-U", "n8n"]
      interval: 10s
      timeout: 5s
      retries: 5

  n8n:
    image: n8nio/n8n:latest
    depends_on:
      postgres:
        condition: service_healthy
    ports:
      - "5678:5678"
    environment:
      DB_TYPE: postgresdb
      DB_POSTGRESDB_HOST: postgres
      DB_POSTGRESDB_PORT: 5432
      DB_POSTGRESDB_DATABASE: n8n
      DB_POSTGRESDB_USER: n8n
      DB_POSTGRESDB_PASSWORD: n8n
      N8N_BASIC_AUTH_ACTIVE: "true"
      N8N_BASIC_AUTH_USER: admin
      N8N_BASIC_AUTH_PASSWORD: change_me
      TZ: Asia/Tokyo
    volumes:
      - n8n_data:/home/node/.n8n

volumes:
  n8n_data:
  n8n_db:

起動コマンド(Dockerが“running”になってから)

cd C:\n8n
docker compose pull
docker compose up -d

docker compose pull

を実行したら、いろいろなものが Pull completeになった。

Pullって何???

Docker の世界でいう pull は、
「イメージ(=プログラムの中身)を ダウンロードしてくる」という意味だよ。


🧩 具体的に言うと

たとえば docker compose up -d を実行すると、
裏で Docker が「このコンテナに使うイメージ(例:n8nio/n8n:latest)」を
Docker Hub(=公式サーバ) から取ってこようとするの。

でも初めて実行する場合は、そのイメージがPCの中にまだ無いから、
先に手動で「取ってくる(pullする)」のが docker compose pull

docker compose up -d 

というのも実行した。

動作確認


 

上記のurlにアクセスしたら、n8nのウェブページが開きました!ようやく使える環境が整ったみたいです。

 

プロンプト: docker desktopも動いてるし、 n8nのウェブページ http://localhost:5678/home/workflows も表示されたし、これで準備万端だと思うけど、で、どうすればいいの、この次?

ChatGPT 5:

おっ、表示まで行けたならもう一息!ここからは「最初のワークフロー」を2本つくって、
①動作確認(Hello)→ ②ちょい実用(RSS監視)の順でいきましょ。


① 超ミニ「Hello n8n」(Webhook → 応答)

  1. 画面右上「New」→ワークフロー作成
  2. 左のノード追加で Webhook を置く
    • HTTP Method: POST
    • Path: hello(=URLはhttp://localhost:5678/webhook/hello
  3. もう1つ Respond to Webhook を置く
    • Response Code: 200
    • Response Body:
      {"ok": true, "message": "Hello from n8n!"}
      
  4. Webhook → Respond to Webhook を線でつなぐ
  5. 右上「Activate」(ON)
  6. 別のターミナル/ツールでテスト:
    curl -X POST http://localhost:5678/webhook/hello
    

    {"ok":true,"message":"Hello from n8n!"} が返れば成功!

Basic認証を有効にしているので、必要なら
curl -u admin:change_me -X POST http://localhost:5678/webhook/hello
のようにユーザー/パスを付けて下さい。


② ちょい実用:RSS監視 → 新着だけSlack(orメール)通知

将来やりたい「ニュース記事の監視→自動解説」への足慣らしです。

  1. 新規ワークフローを作成
  2. Cron ノード
    • Mode: Every X minutes → 15(15分おき)
    • Timezone: Asia/Tokyo
  3. RSS Feed Read ノード
    • Feed URL: 例)https://www.eurekalert.org/rss.xml(後で差し替えOK)
  4. IF ノード(新着判定)
    • 条件:Published is afterExpression{{$now.minus({hours:1})}}
      (直近1時間の新着だけ)
  5. Slack ノード(または Email ノード)
    • Slack: Incoming Webhook URL を credentials に保存
    • メッセージ本文に式を使う:
      *{{$json.title}}*
      {{$json.link}}
      Published: {{$json.isoDate}}
      
  6. 線の繋ぎ方:Cron → RSS → IF(「true」側) → Slack(またはEmail)
  7. Activate(ON)

まずは Slack の代わりに Write Binary FileGoogle Sheets に書き出してもOK。
フィルタ条件を「タイトルに特定キーワード含む」にしたい場合は IF の条件を
Title contains "cancer" | "AI" | "neuroscience" などに変更。


ここから CrewAI へ拡張するなら(道筋だけ)

  • 方式A:n8n →(HTTP Request)→ CrewAIを実行するローカルFastAPI
    • あなたのJupyter/Python側でCrewAIをラップしたAPI(/run)を用意
    • n8nの HTTP Request ノードから POST で叩く → 結果をSlack/メール/シートへ
  • 方式B:n8n がテキストを整形 → OpenAIで要約 → Slackへ(CrewAIなしの軽量版)
    • 後でCrewAIに置き換え可能。まずはHTTP RequestノードでOpenAI APIに投げる形が手軽。

必要なら、インポート用のワークフローJSON(クリック一発で再現)もすぐ出します。
次、どれから作る?(①Webhook応答のJSON、②RSS→SlackのJSON、③OpenAI要約テンプレ、④CrewAI連携のFastAPIサンプル)

プロンプト:なぜSlackなの?自分は普段Slcakを全く使ってないんだけど?

なるほど🙂
Slack を例に出したのは、通知系のノードとして分かりやすいだけなんだ。
n8n では「何か起きたときにどこへ知らせるか?」を自分で自由に選べるから、Slack 以外を使うのが普通に正解だよ。


💡 Slack 以外でよく使われる通知・出力先

用途 おすすめノード できること
📧 メール通知 Email GmailやSMTP経由で自分宛てにメールを送る(新着記事・自動結果など)
🗂 Excel/スプレッドシート連携 Google Sheets / Microsoft Excel 新しいデータを1行ずつ追記、分析用のログとして保存
📝 テキスト保存 Write Binary File / Append to File PC内のファイルやNASに結果を残す
🖥 Webアプリに送る HTTP Request CrewAI や OpenAI API、自作のFlask/FastAPI などへデータ送信
🔔 デスクトップ通知 Telegram / LINE Notify / Discord スマホで即時に受け取れる通知を飛ばす
🧠 AI要約 OpenAI / HuggingFace / Anthropic RSS等で取得した記事を自動要約して記録する

🔧 例:メール通知に変えるには

  1. Slackノードの代わりに Email ノードを追加
  2. 送信設定:
    • From Email: 自分のGmailなど
    • SMTP Host: smtp.gmail.com
    • Port: 465
    • User: 自分のメールアドレス
    • Password: アプリパスワード
    • To Email: 自分のメールアドレス
    • Subject: {{$json.title}}
    • Text:
      {{$json.link}}
      {{$json.isoDate}}
      
  3. これで RSS の新着をメールで受け取れるようになるよ。

だから、Slack はあくまで “通知手段の例” だっただけで、
あなたの環境では Email か Google Sheets のほうが実用的だと思う。


次のステップを決めるとしたら、どれをやりたい?👇
1️⃣ RSSの新着を 自分にメールで送る
2️⃣ RSSの新着を スプレッドシートに自動記録する
3️⃣ RSSの新着を CrewAI(Jupyter)に渡して要約させる