1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Docker の Open WebUI / n8n から Ollama に接続できないときの直し方(OLLAMA_HOST=0.0.0.0 を使わずに)

1
Posted at

この記事は Munim, Inc. の MV2 が、AI を使って英語の原文から翻訳・作成したものです。内容は 2026 年 10 月 12 日に Open WebUI と n8n の公式ドキュメント、および Ollama のソースコードと照合しています。原文(英語): https://munimv2.github.io/docker-ollama.html / 日本語版: https://munimv2.github.io/ja/docker-ollama.html

よくあるエラー

  • Open WebUI に「Ollama: Network Problem」や「Server Connection Error」と表示される。ログに Connect call failed ('127.0.0.1', 11434) と出る。
  • n8n の Ollama 認証情報のテストが ECONNREFUSED 127.0.0.1:11434 や ECONNREFUSED ::1:11434 で失敗する。
  • Dify、Flowise、AnythingLLM でも同様の「connection refused」エラーが出る。

原因

コンテナの中では、localhost や 127.0.0.1 はホストのコンピューターではなく、そのコンテナ自身を指します。Ollama は既定でホストの 127.0.0.1:11434 で待ち受けているため、http://localhost:11434 を使うコンテナは違う家のドアを叩いていることになります。

多くの記事が勧める手早い対処は OLLAMA_HOST=0.0.0.0 です。これで動きますが、ログインのない Ollama を LAN 上のすべての端末に開くことにもなります。まずは以下の方法を試してください。

まずテスト: コマンド 1 つ

ホストで Ollama が動いているか確認します。

curl http://127.0.0.1:11434/api/version

次に、アプリが使うアドレスを使い捨てのコンテナの中からテストします。

docker run --rm --add-host=host.docker.internal:host-gateway curlimages/curl -s http://host.docker.internal:11434/api/version

{"version":"0.x.y"} のような応答が返れば、その URL はコンテナから使えます。「Connection refused」やタイムアウトなら使えません。Open WebUI のイメージには curl が入っているので、docker exec open-webui curl -s http://host.docker.internal:11434/api/version でも試せます。

構成ごとの対処法

あなたの構成 アプリに設定するベース URL 備考
Docker Desktop(Mac / Windows)、Ollama アプリはホスト上 http://host.docker.internal:11434 そのまま動く。Ollama は 127.0.0.1 のままでよい。対処法 1
Linux、Ollama はホストにインストール、アプリは Docker http://host.docker.internal:11434 と --add-host Ollama がコンテナから届く場所でも待ち受ける必要がある。対処法 2 または 3
Ollama とアプリが同じ Compose ファイル http://ollama:11434(サービス名) 最善。Ollama にポート公開は不要。対処法 4
Ollama は Docker、アプリはホスト(npm で入れた n8n など) http://127.0.0.1:11434 -p 127.0.0.1:11434:11434 で公開。::1 エラーを避けるため localhost ではなく 127.0.0.1 を使う

対処法 1: Docker Desktop(Mac、Windows)

Docker Desktop はすべてのコンテナに host.docker.internal を用意し、ホストへ転送します。アプリの Ollama の URL を http://host.docker.internal:11434 に設定してください。Open WebUI では環境変数 OLLAMA_BASE_URL(または「Admin Settings」→「Connections」)、n8n では Ollama 認証情報の「Base URL」です。Ollama 側の OLLAMA_HOST を変える必要はありません。

docker run -d -p 127.0.0.1:3000:8080 --add-host=host.docker.internal:host-gateway \
  -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
  -v open-webui:/app/backend/data --name open-webui --restart always \
  ghcr.io/open-webui/open-webui:main

127.0.0.1:3000 にすると、Open WebUI はこのコンピューターからしか開けません。-p 3000:8080 はほかの端末から開く必要がある場合にだけ使い、その場合は新規登録をオフにしてください(ENABLE_SIGNUP=False)。

対処法 2: Linux で最も簡単で安全な方法(ホストネットワーク)

Linux では --network=host を付けるとコンテナがホストのネットワーク上で動くため、127.0.0.1:11434 が本当にホストの Ollama を指し、Ollama は localhost にバインドしたままで済みます。Open WebUI のドキュメントにもある方法です。ポートが 8080 になる点に注意してください。

docker run -d --network=host \
  -e OLLAMA_BASE_URL=http://127.0.0.1:11434 \
  -v open-webui:/app/backend/data --name open-webui --restart always \
  ghcr.io/open-webui/open-webui:main

http://localhost:8080 を開きます。ホストネットワークでは Open WebUI は通常のプログラムと同じくポート 8080 で待ち受けるので、ホストのファイアウォール(ufw、firewalld)がちゃんと効きます。8080 は必要な接続元からだけ許可してください。

対処法 3: Linux で host.docker.internal を使い、Ollama にはコンテナからだけ届くようにする

Linux では --add-host=host.docker.internal:host-gateway(Compose では extra_hosts: ["host.docker.internal:host-gateway"])で、その名前が Docker ブリッジのアドレス(通常は 172.17.0.1)を指します。127.0.0.1 の Ollama はそこでは待ち受けていないので、より広く待ち受けさせたうえで、コンテナ以外をファイアウォールで締め出します。

  1. sudo systemctl edit ollama.service で次を追加し、sudo systemctl daemon-reload && sudo systemctl restart ollama を実行します。
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
  1. Docker のネットワークだけを許可し、残りをブロックします(Docker の既定のネットワークは 172.16.0.0/12 の範囲)。
sudo ufw allow from 172.16.0.0/12 to any port 11434 proto tcp
sudo ufw deny 11434/tcp

順序が重要で、allow ルールが先に来る必要があります(sudo ufw status numbered で確認)。ブロックされたコンテナには、たいてい「refused」ではなくタイムアウトが返ります。

  1. LAN 上の別の端末から curl http://<このマシンの LAN IP>:11434/api/version が失敗し、上の使い捨てコンテナのテストは成功することを確認します。

docker -p で公開したポートは ufw を素通りしますが、ホストにインストールした Ollama は通常のプログラムなので、これらの ufw ルールが効きます。

対処法 4: Ollama を同じ Compose ファイルに入れる(最善)

同じ Compose ネットワーク上のコンテナはサービス名で互いに届くので、Ollama にポートの公開は不要で、Docker の外からは届きません。

services:
  ollama:
    image: ollama/ollama
    volumes: [ "ollama:/root/.ollama" ]
    # no "ports:" - only containers on this network can reach it
  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
    ports: [ "127.0.0.1:3000:8080" ]
    volumes: [ "open-webui:/app/backend/data" ]
volumes:
  ollama: {}
  open-webui: {}

(コメントは「ports: は書かない。このネットワーク上のコンテナだけが届く」という意味です。)同じファイルに入れた n8n、Dify、Flowise、AnythingLLM も http://ollama:11434 を使います。GPU を使うには、Ollama の Docker ドキュメントにあるデバイス予約の設定を ollama サービスに追加します。

それでも失敗する場合

  • ホスト上の n8n で ECONNREFUSED ::1:11434: localhost が IPv6 に解決され、Ollama は IPv4 で待ち受けています。n8n のドキュメントどおり 127.0.0.1 を使ってください。
  • Podman: ホスト名は host.containers.internal です。
  • 「refused」ではなく「403 Forbidden」: ネットワークの問題ではなく、Ollama が応答したうえで拒否しています。(1) ブラウザのページや拡張機能が Ollama を呼んでいて OLLAMA_ORIGINS がブロックしている(Open WebUI、n8n、Dify はサーバーから呼ぶので OLLAMA_ORIGINS は不要)。(2) リバースプロキシやトンネルが、127.0.0.1 で待ち受ける Ollama に自分のホスト名を渡している。このモードの Ollama は localhost 系の Host 名しか受け付けません(host.docker.internal が通るのは .internal で終わるため)。Ollama FAQ の例と同じく、プロキシから Host: localhost:11434 を送らせてください。

最後に: 開けすぎていないか確認

接続できたら、意図した以上に開けていないかを確認してください。オープンソースのスクリプト local-ai-checkup(読み取り専用で、マシンの外には何も送信しません)で、Ollama のバインドアドレス、公開されている Docker ポート、バージョンを確認できます。

関連(日本語):

誤りがあれば、コメントか https://github.com/munimv2/local-ai-checkup/issues でお知らせください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?