Redis@docker ホストアドレスの指定

前回は、AWS S3互換ファイルサーバーを構築しました。今回は「curl (7) failed to connect to 接続を拒否されました」エラーが出る原因が判明したのでめも。(最終更新2023/2/27)

※ IMAGE_ENDPOINT=<お使いのローカルホスト名>:9000としたところ画像が表示されるようになりました。

前回から引き続き Dockerによるアプリケーション開発環境構築ガイド | Amazon.co.jp を参考にNode.jsアプリケーションのAWSから第4章「本番環境からローカルのDocker環境にポーティングする」を学習してつまづいた点を記します。

minioファイルサーバーをGUIからバケット操作できるようになりなりましたが数10秒経つとアプリがフリーズして

curl (7) failed to connect to localhost port 3000: 接続を拒否されました

コンソールから curl http://localhost:3000 しても拒否されるしブラウザからもアクセスできなくなりました。docker-compose logs で調べてみると

Error: Redis connection to redis:6379 failed - connect ETIMEDOUT <grobal IP address>:6379

メッセージからするとredis の接続に問題があるようです。Google先生に訊いてみるとヒントがありました。

Error: Redis connection to 127.0.0.1:6379 failed – connect ECONNREFUSED 127.0.0.1:6379

環境変数REDIS_HOST にコンテナIPを指定すると良いようです。つまりredis の名前解決をするかIPを固定してredisコンテナに向ける必要がありました。今回はIP固定で行きました。

./todos/docker-compose.yml
version: '3' services: mysql: image: mysql:5.7 ports: - "33066:3306" environment: - MYSQL_USER=sampleUser - MYSQL_PASSWORD=samplePass - MYSQL_DATABASE=sampleDb - MYSQL_ROOT_PASSWORD=rootpass networks: td000net1: ipv4_address: 172.18.0.3 restart: always volumes: - db-data:/var/lib/mysql redis: image: redis ports: - "6379:6379" networks: td000net1: ipv4_address: 172.18.0.5 s3: image: minio/minio:latest ports: - "9000:9000" - "9001:9001" networks: td000net1: ipv4_address: 172.18.0.10 restart: always volumes: - "s3-data:/data" - "s3-config-data:/root/.minio" command: "server /data --console-address :9001" env_file: - .env environment: - MINIO_ROOT_USER=${MINIO_ROOT_USER} - MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD} - MINIO_SERVER_URL=http://172.18.0.10:9000 application: image: sample_todos:1.0 hostname: vmware.wiki extra_hosts: - "vmware.wiki:180.30.116.76" ports: - "3000:3000" networks: td000net1: ipv4_address: 172.18.0.4 restart: always env_file: - .env environment: - MYSQL_HOST=mysql - MYSQL_PORT=3306 - MYSQL_USER=sampleUser - MYSQL_PASS=samplePass - MYSQL_DB=sampleDb - AWS_ACCESS_KEY=${AWS_ACCESS_KEY} - AWS_SECRET_KEY=${AWS_SECRET_KEY} - MINIO_ROOT_USER=${MINIO_ROOT_USER} - MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD} - AWS_REGION=ap-northeast-1 - AWS_DEFAULT_OUTPUT=json - AWS_ENDPOINT=http://172.18.0.10 - AWS_PORT=9000 - AWS_S3_BUCKET=docker-local-sample-bucket - IMAGE_ENDPOINT=http://vmware.wiki:9000 - REDIS_HOST=172.18.0.5 - REDIS_PORT=6379 volumes: - ".:/app" - "/app/node_modules" depends_on: - mysql - redis - s3 mc: image: minio/mc:latest depends_on: - s3 entrypoint: /bin/sh networks: td000net1: ipv4_address: 172.18.0.6 stdin_open: true tty: true volumes: db-data: s3-data: s3-config-data: networks: td000net1: ipam: driver: default config: - subnet: 172.18.0.0/24 gateway: 172.18.0.1

redisとの接続をクリアするとアプリがタイムアウトすることもなくなりました。

考えてみれば当たり前のことで恐縮ですが疑ってみないことには分からないことも数多ありますね。

同じカテゴリーの記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です