目前我有一個在專用網路內運行 Alpine Linux 的 docker 映像。我擁有該 docker 映像的 root 存取權。
在同一個私有網路上,有一個資料庫實例。只有在同一網路上的系統才能存取資料庫(例如:前面提到的 docker 映像)
現在,要偵錯資料庫內部的內容,我必須透過 SSH 連線到 docker 映像,然後從該 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