はじめに
node.jsでメジャーなWeb Framworkはexpressで長らく使っていましたが。
fastifyについての記事を多く見かける様になったの使ってみました。
その際にDockerで実行環境を構築した時にハマったポイントを記載します
実行環境
os: mac os X 10,14,6
node.js: v14.15.0
docker: v19.03.13
ハマったポイント
fastifyはデフォルトでリッスンするホストが127.0.0.1(localhost)
でdocker環境で実行した場合にportをexposeしていてもapiエンドポイントに接続できない。
※ expressはデフォルトが0.0.0.0
127.0.0.1でもLocal環境での実行なら問題はありませんが、docker環境で実行すると問題が発生します。
それは、ホストのlocalhostとdockerのlocalhostは違うという事です。(別ネットワーク)
なので、コンテナをrunしてlocalhost:port
でアクセスしても繋がりません。
なので別ホストから接続が出来るように0.0.0.0
でリッスンしましょうという事です。
解決方法
expressと同じ仕様だろうと思わず、ちゃんとドキュメントを読みましょうという事でした。
引用
- 対処前
=== 省略 ===
fastify.listen(3000, function (err, address) {
if (err) {
fastify.log.error(err)
process.exit(1)
}
fastify.log.info(`server listening on ${address}`)
})
- 対処後
=== 省略 ===
fastify.listen(3000, '0.0.0.0', function (err, address) {
if (err) {
fastify.log.error(err)
process.exit(1)
}
fastify.log.info(`server listening on ${address}`)
})
- express(参考)
app.listen(3000);