事象
Roket.chatコンテナをMongoDBコンテナに接続しようとするも以下メッセージでエラーになる。
/app/bundle/programs/server/node_modules/fibers/future.js:313 throw(ex); ^ Error: getaddrinfo ENOTFOUND mongo at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:64:26) { name: 'MongoNetworkError', errorLabels: [ 'TransientTransactionError' ], [Symbol(mongoErrorContextSymbol)]: {} }
環境情報
- Docker Engine Version: 19.03.5
- Rocket.Chat Version: 3.2.2
- NodeJS Version: 12.16.1 - x64
- MongoDB Version: 4.2.6
原因/解決策
--link
オプションにおけるエイリアス名を「mongo」にする必要がある。
具体的には以下コマンドにて事象欄に記載したエラーが出ていたが
$ docker container create --name rocketchat -p 3000:3000 --link rocketchat_db:db rocketchat/rocket.chat:latest;docker container start rocketchat;docker logs -f rocketchat
以下に変更したところエラーは解消された。
$ docker container create --name rocketchat -p 3000:3000 --link rocketchat_db:mongo rocketchat/rocket.chat:latest;docker container start rocketchat;docker logs -f rocketchat
以下、補足です。
補足
Dockerを利用してRocketchatとMongoDBの接続を実施する際はMongoDBを先に起動させます。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 672f22cfed75 mongo:latest "docker-entrypoint.s…" 7 hours ago Up 55 seconds 27017/tcp rocketchat_db
このMongoDBに対して接続をする際にRocket.chatのイメージの詳細を確認すると以下のような環境変数になっています。
"Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "NODE_VERSION=12.16.1", "NODE_ENV=production", "DEPLOY_METHOD=docker", "MONGO_URL=mongodb://mongo:27017/rocketchat", "HOME=/tmp", "PORT=3000", "ROOT_URL=http://localhost:3000", "Accounts_AvatarStorePath=/app/uploads" ],
MONGO_URLを今回は指定しなかったのでデフォルトである「mongo」が指定されて名前解決を試みます。
が、それの解決に失敗していたので表題のエラーになっていました。
以上、同様の事象が発生した方はImageの詳細を見てどのような環境変数が与えられているかを確認してみてください。