
OllamaをWindowsで動かした場合のDocker-OpenWebUIとWSL2内からのネットワークアクセス設定
皆さんローカルLLMツールOllamaはお使いでしょうか。いろいろローカルLLMを触ろうとして思ったのはやはりこのツールは使いやすい、色々わからなくてもローカルLLMを動かすだけならこんなに素晴らしいツールはないだろうと毎日感謝しております。
今回はWindowsでOllamaを動かした場合のネットワークまわりのアクセストラブルと解決方法についてまとめておきます
環境ネットワーク図 今回のやりたいこと

Ollama(Ollamaサーバー)はWindowsで起動
Open WebUIはDockerで起動
Ollamaを利用するプログラムはWSL2内で起動
要するにWindowsにはプログラミング言語をいれたくないという構成です。
Open WebUIの設定
トラブル:Ollamaのモデルがでない!

解決方法:
左下の管理者パネルから
設定ー>接続

接続できない場合、Ollama APIの設定が空白か間違っている可能性があります、今回はDockerで動かしているので
http://host.docker.internal:11434
でOllamaに接続され動くようになりました。
トラブル:WSL2からPythonで接続できない!
PythonからOllamaに接続するプログラムを書いて実行すると・・ネットワーク接続エラー・・
:~/code_wsl/ollama_python_sample$ python3 vision2-tag2-jp.py /mnt/c/Camera/DCIM/102NIKON/DSCN0369.JPG
Traceback (most recent call last):
File "/home/penguin/.local/lib/python3.10/site-packages/httpx/_transports/default.py", line 72, in map_httpcore_exceptions
yield
File "/home/penguin/.local/lib/python3.10/site-packages/httpx/_transports/default.py", line 236, in handle_request
resp = self._pool.handle_request(req)
File "/home/penguin/.local/lib/python3.10/site-packages/httpcore/_sync/connection_pool.py", line 216, in handle_request
raise exc from None
File "/home/penguin/.local/lib/python3.10/site-packages/httpcore/_sync/connection_pool.py", line 196, in handle_request
response = connection.handle_request(
File "/home/penguin/.local/lib/python3.10/site-packages/httpcore/_sync/connection.py", line 99, in handle_request
raise exc
File "/home/penguin/.local/lib/python3.10/site-packages/httpcore/_sync/connection.py", line 76, in handle_request
stream = self._connect(request)
File "/home/penguin/.local/lib/python3.10/site-packages/httpcore/_sync/connection.py", line 122, in _connect
stream = self._network_backend.connect_tcp(**kwargs)
File "/home/penguin/.local/lib/python3.10/site-packages/httpcore/_backends/sync.py", line 205, in connect_tcp
with map_exceptions(exc_map):
File "/usr/lib/python3.10/contextlib.py", line 153, in __exit__
self.gen.throw(typ, value, traceback)
File "/home/penguin/.local/lib/python3.10/site-packages/httpcore/_exceptions.py", line 14, in map_exceptions
raise to_exc(exc) from exc
httpcore.ConnectError: [Errno 111] Connection refused
上記に解説が書いていました
公式の資料的には以下です

上記の記載と完全に一致していない気もしますが下記で動きました
Windowsの検索で「環境変数」と検索
OLLAMA_HOSTを0.0.0.0に設定してOllamaを再起動

WSL2側のシェルで
export OLLAMA_HOST=192.168.X.X
192.168.X.XのXは実際のWindows側のIP
Windows側のIPはWSL2のシェルで
nslookup "$(hostname).local"
で出てくるやつを設定
動かす
import ollama
import sys
inputImageFile = sys.argv[1]
response = ollama.chat(
model='llama3.2-vision:11b',
messages=[{
'role': 'user',
'content': 'これはなんの画像ですか?',
'images': [inputImageFile]
}]
)
print(response)
python3 vision1-jp.py /mnt/c/Camera/DCIM/102NIKON/DSCN0723.JPG
{'model': 'llama3.2-vision:11b', 'created_at': '2024-11-17T04:09:00.802314Z', 'message': {'role': 'assistant', 'content': 'この画像は、コロコロやワニなどの動物を撮影したものと思われますね。特に鼻と口の部分が明瞭ですので、ワニのような大型で水生の爬虫類であることがわかります。さらに、歯の数からもワニではないかと考えられます。また、ワニは体色がさまざまな種類があり、黄色いワニや緑色のワニなどを見ることができますが、この画像では青紫色に近い体色をしているので、オーストラリア産ワニである可能性もあります。'}, 'done_reason': 'stop', 'done': True, 'total_duration': 100533175800, 'load_duration': 2768237600, 'prompt_eval_count': 19, 'prompt_eval_duration': 76901000000, 'eval_count': 135, 'eval_duration': 20122000000}
WSL2からWindowsのOllamaに接続できました!!😉😉😉
環境変数はログイン時に読み込まれるようにしておきましょう
vi ~/.bashrc
末尾に追加
export OLLAMA_HOST=192.168.X.X
いったんbashを抜けて
再度ログイン
echo $OLLAMA_HOST
でIPが出てくればOK
IPアドレスが動的な場合は下記のような感じで対応
OLLAMA_IP=$(nslookup "$(hostname).local" | grep -Eo '192\.168\.[0-9]+\.[0-9]+')
export OLLAMA_HOST=$OLLAMA_IP