NodeJsdockerイメージとredisdockerイメージ(Mac OS X環境)間の通信を許可しようとしています:
nodeJs Dockerfile:
FROM node:4.7.0-slim
EXPOSE 8100
COPY . /nodeExpressDB
CMD ["node", "nodeExpressDB/bin/www"]
redis Dockerfile:
FROM ubuntu:14.04.3
EXPOSE 6379
RUN apt-get update && apt-get install -y redis-server
redisに接続しようとしているnodeJsコードは次のとおりです。
var redis = require('redis');
var client = redis.createClient();
dockerのビルド手順:
docker build -t redis-docker .
docker build -t node-docker .
docker run imagesステップフロー:
docker run -p 6379:6379 redis-docker
docker run -p 8100:8100 node-docker
エラー:
Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
at Object.exports._errnoException (util.js:907:11)
at exports._exceptionWithHostPort (util.js:930:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1078:14)
Node-dockerからRedisに接続するにはどうすればよいですか?
Redisは、ノードアプリケーションが実行されているコンテナーへの個別の仮想イーサネットアダプターとIPアドレスを持つ個別のコンテナーで実行されます。2つのコンテナーを リンク する必要がありますまたは、 ユーザー定義ネットワーク を作成します
docker network create redis
docker run -d --net "redis" --name redis redis
docker run -d -p 8100:8100 --net "redis" --name node redis-node
次に、ノードに接続するときにホストredis
を指定して、redisクライアントがデフォルトのredis
ではなくlocalhost
コンテナに接続しようとするようにします。
const redis = require('redis')
const client = redis.createClient(6379, 'redis')
client.on('connect', () => console.log('Connected to Redis') )
Docker Compose は、マルチコンテナセットアップの定義に役立ちます。
version: '2'
services:
node:
build: .
ports:
- "8100:8100"
networks:
- redis
redis:
image: redis
networks:
- redis
networks:
redis:
driver: bridge
redisがインストールされている場合は、コマンドを実行します
Sudo apt-get install redis-server
次に、サイトを実行します。
/ etc/hostsファイルを変更して、redisコンテナーのdockeripを更新することもできます。
Dockerinspectを使用してdockeripを見つけます
それはうまくいくはずです。ダウンロードリンクは次のとおりです。
私はそれがうまくいくことを願っています。
ノードに接続するときは、サーバーIPを渡す関数の引数でredis-docker
を使用します。