AIエンジニアリング Dify デジタルマーケティング導入支援 プログラミング

DifyをDockerで入れたら地獄のエラーパレードだった件

〜Redisが怒り、PostgreSQLが沈黙し、ついに私は神のinit_app()を見つけた〜


🎮 Dify?いいじゃん、Dockerで立てれば楽勝っしょ!

ある晴れた日の午後、私は思いついた。
「ChatGPTで遊ぶだけじゃなくて、自分専用のAIアプリ作れるらしい。しかも、Difyっていう神ツールがあるらしい!」

GitHub開いた。スター多い。公式サイト見た。かっこいい。
「よし、Dockerで docker compose up -d すれば爆速起動だな!」」

そして、いつもの流れでこう打ったわけですよ

bashコピーする編集するgit clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .env
docker compose up -d

このときの私は思ってた。
「これで WebUI が http://localhost で開いて、アカウント作って、あとはプロンプト書いて遊ぶだけやん!カンペキ!」

5分後——
“Internal Server Error”
“No such container: dify-backend”
“Redis client is not initialized”
……あれ?これ、Difyのはずが 紀州のDonfanになっとるやん…**😇


エラー達のカーニバル開幕 ~ どこで間違ったのか ~

🐛 dify-backend なんていない

Dockerの中を見たら「docker-api-1」という名前で立ち上がっていた。

Docker Compose v2 の作る名前は「<プロジェクト名>-<サービス名>-1」。 これを知らずに参考記事通りに動かしてたら、そら動かんわな。

javascriptコピーする編集するError response from daemon: No such container: dify-backend

↑まずこれで萎えた。
でもよく見たら、今時のDifyはコンテナ名が dify-backend じゃなくて
docker-api-1 とか docker-web-1 になってる。

「ほほう、名前のトラップね?」と気を取り直す。


🧱 main.pymanage.py もない問題

DBマイグレーションしようとするとお決まりのコマンド

bashコピーする編集するdocker exec -it docker-api-1 python3 app/main.py db upgrade

が通らない。「そんなファイルはねえ!」って怒られる。

中を覗いてわかった。最近のDifyは構成がガラッと変わってて、commands.py ってファイルに色々詰まってるらしい。

「よし、じゃあ from commands import migrate_database っと……」

pgsqlコピーする編集するImportError: cannot import name 'migrate_database' from 'commands'

あぁん??😇


😤 やっと見つけたのは upgrade_db() という救世主

grep "def "で commands.py を洗い出すと、出てきた…

rubyコピーする編集するdef upgrade_db():

これや!と確信。さっそく実行。

でも……

vbnetコピーする編集するRuntimeError: Redis client is not initialized. Call init_app first.

Redisに怒られる。


🔍 最終奥義:create_app()

ついに /app/api/app_factory.py の中で…

rubyコピーする編集するdef create_app():

という文字を発見!

もうこの時点でテンションが大谷翔平。
Pythonコンソールで実行

pythonコピーする編集するfrom app_factory import create_app
create_app()

from commands import upgrade_db
upgrade_db()

やっと、やっと、マイグレーション成功……!🎉🎉🎉


【結末】

👑 最後のボス:「テナント作成」にも罠がある

「さーて、管理者アカウント作るか」と思って

pythonコピーする編集するfrom commands import create_tenant
create_tenant(email="admin@example.com")

やったらまた怒られた:

cssコピーする編集するTypeError: Context.__init__() got an unexpected keyword argument 'email'

_人人人人人人人人_
> それCLIコマンドや <
 ̄Y^Y^Y^Y^Y^Y^Y ̄

というわけで最終正解:

bashコピーする編集するdocker exec -it docker-api-1 python3 /app/api/commands.py create-tenant --email admin@example.com --name 管理者 --language ja

これで Web UI も無事起動!
ついに http://localhost で Dify が立ち上がったのだった……✨


【まとめ】

🧭 DockerでDify立てる人へ、先人からのアドバイス

この地獄は、バージョン違い+構成進化+情報の古さが引き起こした

問題原因
dify-backend がないDocker Compose v2 の名前仕様
main.py がない構成変更、commands.py へ移行
Redisエラーcreate_app() 呼び出し必須
CLIコマンド形式に気づかないclickでデコレートされている
  • 🔍 コンテナ名は dify-backend じゃない! docker-api-1 とか見よう
  • 📁 main.py はもうない。commands.py に頼れ
  • 🔑 create_app() を実行しないと Redis にブチ切れられる
  • 🧑‍💻 テナント作成は Python じゃなく CLIでやれ!

【あなたにも聞きたい!】

💬 あなたはDifyインストールでどんなトラブルに遭遇した?
💥「これやらかした!」みたいな話、コメントで教えてください!

-AIエンジニアリング, Dify, デジタルマーケティング導入支援, プログラミング