現在、プライベート ネットワーク内で Alpine Linux を実行している Docker イメージがあります。その Docker イメージへのルート アクセス権を持っています。
同じプライベートネットワーク上にデータベースインスタンスがあります。同じネットワーク上のシステムのみがデータベースにアクセスできます(例:前述のdockerイメージ)
現在、DB内部のデバッグを行うには、DockerイメージにSSHで接続し、そのDockerイメージ内からコマンドラインツールを実行する必要があります。これはかなり複雑です。
代わりに、ローカル PC 内の開発ツールを使用して、そのデータベースに接続する方法はありますか? この用語がポート転送なのかプロキシなのかわかりません。
答え1
次のように接続すると仮定します:
ssh user@docker
必要なもの-L
:
ssh -L port1:server:port2 user@docker
はserver:port2
、Dockerコンテナから見たデータベースのアドレスとポートです(このアドレスはそこには)。
ローカルはssh
TCP ポートでローカルにリッスンしますport1
。ポートは選択してください。
ここで、ローカル コンピュータからlocalhost:port1
(または127.0.0.1:port1
) に接続すると、接続はserver:port2
から到達しますdocker
。server
マシンは、それが から来ていることを認識しますdocker
。これは、「ローカル ポート転送」と呼ばれます。
この方法では、ローカル ツールがリモート データベースにアクセスできます。ツールは に接続する必要がありますlocalhost:port1
。
ノート:
- これはTCPでのみ機能します。UDPではない。
- ローカル ネットワーク内の他のマシンは、ローカル コンピュータをリレーとして使用してデータベースにアクセスできなくなります。おそらくこれが望ましい方法です。そうでない場合は、次の質問を確認してください。SSH を使用して、ローカル ネットワーク上のトンネル化されたリソースを提供できますか?
ssh -N …
トンネルを確立するために使用するリモートコマンドを実行せずに。- これを自動化するために使用します
autossh
。 - 1024 未満の番号のポートは特権ポートです。通常のユーザーはこのようなポートにバインドできません。
port1
それに応じて選択してください。 - SSH サーバー (あなたの場合) の設定を使用
AllowTcpForwarding
して、ポート転送を禁止できます。デフォルトでは許可されているので、おそらくそのままで動作するでしょう。sshd_config
docker