ローカルのDocker環境から踏み台の先にある共有サーバーからしか接続できないDBサーバーに接続する方法

DB, docker

結論

以下の3ステップで実施可能です。

1. 共有サーバー接続用ポートフォワーディング

2. DB接続用ポートフォワーディング

3. DB接続設定イメージ(Docker環境のアプリケーションでの設定)

背景

こんにちは、
株式会社レコチョクで開発を担当している田部井です。
社内では主に、murketというサービスの開発を行っています。

開発をしている中で、Dockerでの開発環境が存在しつつも、
検証やテストのために共有サーバーが存在するような環境が世の中にはあるんじゃないかな〜と思っています。
そのような状態で共有サーバーの方で何らかの問題がおき、その問題を解決するために
Docker環境で共有サーバーが利用するDBと同じデータを参照したい時がありました。
ローカルだけで完結させたいなら、DBのダンプを取り、Dockerに反映するみたいなことでも解決できますが、
ダンプはサイズ大きいと、取得にも反映にも時間がかかり大変だったりみたいなこともあるので、直接接続する方法を考えました。

イメージ図

通常時の調査、作業イメージ図

image-20251030092118326.png

今回やりたいことのイメージ図

image-20251030092131226.png

実際にやってみた

まずは、ローカルから踏み台の先にある共有サーバーへのポートフォワーディングを実施します。

共有サーバー接続用ポートフォワーディング

例: ssh -L10000:share-server:22 user@jump-server -p 22

イメージ図

image-20251030092143746.png

次に、共有サーバーへのポートフォワーディングを利用した、DB接続用ポートフォワーディングを実施します。

DB接続用ポートフォワーディング

例: ssh -L 13306:db-server:3306 -p 10000 user@localhost

image-20251030092203061.png

最後に、Docker環境のアプリケーションでの接続設定を行います。

DB接続設定イメージ

image-20251030092233827.png

これで、ローカルのDocker環境から踏み台の先にある共有サーバーが利用するDBに接続することができます。

最後に

これで、共有サーバーで起きた事象の検証が楽にできるようになるかなと思います。
ですが、実際の利用にはいろいろなリスクを伴う場合があるかと思います。(ゴミデータを追加してしまったり、データを破損してしまったり、、、)
実施時のリスクを考えたうえで、ルールを守って楽しく開発していきましょう。

もっといいやり方もありそうな気はするので、ご意見あればお聞かせください。

DB, docker