2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SymbolAPIノードのMongoDBにSSH経由で接続する

Last updated at Posted at 2025-12-14

必要なもの

  • ロールにAPIが含まれているSymbolノード
  • Tera Term または PuTTY

MongoDB コンテナの IP とポートを調べる

まず、docker ps コマンドで MongoDB コンテナ名を調べます。

$ docker ps
CONTAINER ID   IMAGE                                        COMMAND                  CREATED        STATUS                 PORTS                        NAMES
d18c1ab5b762   symbolplatform/symbol-server:gcc-1.0.3.9     "/bin/bash /symbol-c…"   2 months ago   Up 2 weeks             0.0.0.0:7900->7900/tcp       mainnet-node
4c11df2c87ca   symbolplatform/symbol-server:gcc-1.0.3.9     "/bin/bash /symbol-c…"   2 months ago   Up 2 weeks                                          mainnet-broker
17b22ca1104e   symbolplatform/symbol-rest:2.5.1             "npm start --prefix …"   2 months ago   Up 2 weeks             0.0.0.0:3010->3000/tcp       mainnet-rest-gateway
12d6ad7e7e5d   mongo:7.0.23                                 "docker-entrypoint.s…"   2 months ago   Up 2 weeks             27017/tcp                    mainnet-db
e06b4784e8db   symbolplatform/symbol-server:gcc-1.0.3.9     "/bin/bash /symbol-c…"   2 months ago   Up 2 weeks             0.0.0.0:7950->7950/tcp       testnet-node
4087f52bb1a6   symbolplatform/symbol-server:gcc-1.0.3.9     "/bin/bash /symbol-c…"   2 months ago   Up 2 weeks                                          testnet-broker
5161191d856b   symbolplatform/symbol-rest:2.5.1             "npm start --prefix …"   2 months ago   Up 2 weeks             0.0.0.0:3060->3000/tcp       testnet-rest-gateway
4339e4fe9748   mongo:7.0.23                                 "docker-entrypoint.s…"   2 months ago   Up 2 weeks             27017/tcp                    testnet-db
aadea88ec5de   symbolplatform/symbol-explorer:1.3.0-amd64   "ash -c '/bin/ash /s…"   7 months ago   Up 2 weeks             0.0.0.0:90->4000/tcp         mainnet-explorer
3ae4a0dda632   symbolplatform/symbol-explorer:1.3.0-amd64   "ash -c '/bin/ash /s…"   7 months ago   Up 2 weeks             0.0.0.0:100->4000/tcp        testnet-explorer

IMAGEにmongoが含まれる行を探します。この例ではメインネットとテストネットの両方が稼働していますが、ここではテストネットに接続してみます。

NAMEがtestnet-dbで、ポートが27017であることが分かります。

次に、コンテナ名を使ってIPアドレスを調べます。

docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' コンテナ名

上記の例では、以下のように実行します。

$ docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' testnet-db
172.21.0.3

これで、IPアドレスが172.21.0.3であることが分かりました。

ターミナルエミュレータの設定

Tera Termの場合

SSH接続後、Tera Termのメニューから「設定 -> SSH転送」を選択するとSSHポート転送ダイアログが開くので、「追加」を押します。

SSHポート転送

ローカルポート: 27027(任意の未使用ポートでOK)
リモートホスト: 172.21.0.3(上記で調べたIPアドレス)
リモートポート: 27017(上記で調べたポート)

SSHポート転送 - 設定

設定出来たら、「OK」を押してSSHポート転送ダイアログを閉じます。

PuTTYの場合

セッションから接続先を読み込み、「接続 -> SSH -> トンネル」を選択します。

  • ローカルポート: 27027(任意の未使用ポートでOK)
  • 送り先: 172.21.0.3:27017(上記で調べたIPアドレスとポート)

入力後、「追加」ボタンを押します。
PuTTY

「転送するポート一覧」に設定が追加されます。
PuTTY - 登録後

設定が完了したら、SSH でサーバーにログインします。

ローカルPCから接続

SSH接続出来たらローカルPCからMongoDBにアクセスしてみましょう。

MongoDB Compass で接続

MongoDB Compassをインストールします。以下のリンクからダウンロードできます。

Compassの接続設定で、ポート番号を「ローカルポート」に設定した値(例: 27027)に変更し、「Connect」ボタンを押すと接続できます。
接続URI例: mongodb://localhost:27027/

MongoDB Compass

catapultスキーマにSymbol Restで扱うデータが格納されています。
Base64で格納されていることが多いので、16進数文字列をバイナリ->Base64変換する面倒さがあります。

MongoDB Compass - find

自作プログラムからアクセスしたい

Python などのプログラムから接続する場合、ローカルホストに接続するように記述します。
以下はPythonでMongoDBにアクセスする例です。

"""
MongoDBからcatapultブロック情報を取得するサンプルスクリプト。
"""
from pprint import pprint
from pymongo import MongoClient
from bson import ObjectId, Binary


def clean_mongo_doc(doc):
    """
    MongoDBドキュメントを再帰的にクリーンアップする関数
    """
    if isinstance(doc, dict):
        return {k: clean_mongo_doc(v) for k, v in doc.items()}
    if isinstance(doc, list):
        return [clean_mongo_doc(v) for v in doc]
    if isinstance(doc, ObjectId):
        return str(doc)
    if isinstance(doc, (bytes, Binary)):
        return doc.hex()
    else:
        return doc


def main():
    """
    メイン処理
    """
    client = MongoClient("localhost", 27027)
    db = client.catapult
    collection = db.blocks

    mongo_doc = collection.find_one(filter={"block.height": 2})
    pprint(clean_mongo_doc(mongo_doc))


if __name__ == "__main__":
    main()

vscode - python

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?