Railway/Reference/Errors
ENOTFOUND redis.railway.internal
Railway で発生する「ENOTFOUND redis.railway.internal」エラーの原因と対処法を解説します。
著者: AIイノベーションズ 阿部隼也(X / Twitter)ENOTFOUND redis.railway.internal
このエラーは、アプリケーションがRailwayのプライベートネットワーク上でRedisサービスを見つけられない場合に発生します。
このエラーの意味
アプリケーションがredis.railway.internal
というホスト名でRedisに接続しようとしましたが、DNS解決に失敗しました。これは、ネットワーク設定の問題や、サービス間の接続の問題を示しています。
このエラーが発生する原因
- プライベートネットワーキングの問題: アプリケーションとRedisサービスが同じプライベートネットワーク上で正しく通信できていない。
- Redisサービス名の不一致: Redisサービスの内部DNS名が、デフォルトの
redis.railway.internal
と異なる名前に変更されている。 - クライアントライブラリの設定: 使用しているRedisクライアントライブラリが、RailwayのIPv6ベースのプライベートネットワークと互換性がないか、特別な設定が必要な場合があります。
解決策
ioredis
Node.jsでioredis
ライブラリを使用している場合、IPv6アドレスを正しく解決するために、接続オプションでfamily: 0
を指定する必要があります。
const Redis = require("ioredis");
const redis = new Redis(process.env.REDIS_URL, { family: 0 });
別のプロジェクトにあるRedisデータベース
アプリケーションとRedisデータベースが異なるRailwayプロジェクトにある場合、プライベートネットワーク経由で直接通信することはできません。この場合、RedisサービスのTCPプロキシを有効にし、提供されたパブリックなホストとポートを使用して接続する必要があります。
Redisデータベースへのローカル接続
ローカルマシンからRailway上のRedisデータベースに接続する場合も、TCPプロキシを使用する必要があります。railway connect
CLIコマンドを使用すると、簡単に接続できます。
PR