DockerでOllamaとDifyを連携してローカルLLM環境を作る(解説編)

前回の手順編の続きとなります。

OllamaとDifyをDocker環境に導入する公式手順のままでは、Ollamaはデフォルトの「bridge」ネットワークに接続し、DifyはDifyをdocker composeする際に作成されるユーザー定義ネットワークの「docker_default」と「docker_ssrf_proxy_network」に接続します。このような異なるネットワーク間では直接通信ができないため、今回はOllamaをDifyが稼働するネットワーク「docker_default」に接続させることにしました。

稼働ネットワークの確認

Docker導入直後のネットワークをDocker network lsコマンドで確認すると上記のように3つ存在します。

Dify導入後のネットワークを再びDocker network lsコマンドで確認すると上記のようにdocker_default、docker_ssrf_proxy_networkが作成された事がわかります。

Docker DesktopダッシュボードからDifyのWebサーバーのnginx-1をクリックします。

inspect-->Networksの順にクリックすると"Networks"が"docker_default"である事が確認できます。Ollamaコンテナを作成するときに明示的にこのdocker_defaultネットワークに接続すると良い事が分かります。

変更点

以下は公式サイトhttps://hub.docker.com/r/ollama/ollama掲載のDockerでOllamaを導入するコマンドです。

上記コマンドをOllamaコンテナ作成の際docker_defaultネットワークに接続するように以下のように「--network docker_default」で明示指定します。またDockerデーモンが起動している限り、コンテナがどのような理由で停止した場合でも、Dockerが自動的にそのコンテナを再起動させ、いつでも使えるようにするための「--restart always」も付加しました。

Ollama導入後の確認

念のためollamaコンテナがdocker_defaultに接続しているのか確認するためDocker Desktopダッシュボードからollamaをクリックします。

上図のようにinspect-->Networksの順にクリックすると"Networks"が"docker_default"である事が確認できます。また"DNSNames"が"ollama"なので下図のようにDifyのモデルプロバイダー設定画面のBase URLが「http://ollama:11434」で指定が可能となります。

蛇足

今回はOllamaコンテナ作成の際docker_defaultネットワークに接続するように「--network docker_default」で明示指定しましたが、公式サイトhttps://hub.docker.com/r/ollama/ollama掲載のネットワークを指定しないコマンドでollama作成後、docker network connect docker_default ollamaコマンドで後からdocker_defaultに接続するやり方も考えられます。