【Node.js】Docker-composeでMailHogに接続できず手間取った話

投稿者:

はじめに

例によって環境はこの人です。

https://github.com/mayarin/NodejsMySQLDocker/releases/tag/20201102

またdocker-composeでハマった

主な原因はどの道docker-composeの記述です。
本当はアカウント登録時の流れを仮登録メール発信→MailHogでのメール受信→認証メール発信→本登録と言う流れにしようと思い、Node.jsからMailHogへの接続を試していました。

最初の記述が以下のとおり

  mail:
    image: mailhog/mailhog
    ports:
      - 8025:8025

https://kakkoyakakko2.hatenablog.com/entry/2019/11/21/003000

SMTPポートを開く旨上記の参考資料にあったので、記述を修正。

  mail:
    image: mailhog/mailhog
    ports:
      - 8025:8025
      - 1025:1025

index.jsを修正。

const nodemailer = require("nodemailer");

const transporter = nodemailer.createTransport({
  host: "mail",
  port: 1025,
  auth: {
    user: 'user',
    pass: 'password',
  }
});

いざ発信を試みると以下の通り叱られる。

UnhandledPromiseRejectionWarning: Error: getaddrinfo ENOTFOUND mail

ちゃんとmailhogは http://127.0.0.1:8025/ で見えてるんですが…。

解決

Googleを堂々巡りしながら試行したところ
・サービス名が衝突してるだけではないか(←多分違う)
・networksのスコープに入ってないのではないか
と気付き、docker-composeを以下の様に修正。

  mailhog:
    image: mailhog/mailhog
    ports:
      - 8025:8025
      - 1025:1025
    networks:
      - backend

解決。
なお本懐は別サイトを参照し、SequirizeのfindOrCreate を使う方がスマートだと思いほぼ引用で修正しました。

https://blog.capilano-fw.com/?p=5893#DB

あと残り作業

・入力バリデートをHTML5でいいので実装
・パスワードリマインダ
・ログイン中の会員情報の修正
・機能実装(今回は行先掲示板にでもします)
・herokuに公開
・気が向いたらAngularでSPAにしてみる
この辺の予定です。

https://github.com/mayarin/NodejsMySQLDocker/releases/tag/20201106

コメントを残す