![](/img/trans.png)
[英]SSH Tunnel from Remote Server to Remote Server (to connect RStudio to MySQL)
[英]Expose ssh tunnel to remote mysql server to other container?
我想將Docker用於本地Web開發,並遵循不同的教程。 我們只能通過ssh隧道訪問mysql服務器。 我想將這部分放入一個特殊的容器中,僅負責建立通往mysql服務器的ssh隧道,然后其他容器可以連接到該容器,就好像它是本地mysql服務器一樣。 我認為這比每個通過ssh自己連接的容器更有意義。 還是一個更好的主意?
我遇到了這個Docker鏡像: https : //hub.docker.com/r/dogstudio/remote-ssh,但是無法讓它為我工作,所以我自己嘗試了一下。
到目前為止,我設法創建了一個Docker容器,並在其bash外殼中將其稱為ssh user@example.com -4 -L 33306:127.0.0.1:3306 -N
,之后便可以通過mysql -h 127.0.0.1 -P 33306 -u user -p
連接到遠程mysql服務器mysql -h 127.0.0.1 -P 33306 -u user -p
。
然后,我進入另一個Docker容器( php
)的bash並嘗試調用mysql -h ssh_mysql -P 33306 -u user -p
。 不幸的是,我總是收到錯誤ERROR 2003 (HY000): Can't connect to MySQL server on 'ssh_mysql' (111 "Connection refused")
。
我嘗試了很多,例如在這里進行了解釋: https : //superuser.com/questions/588591/how-to-make-ssh-tunnel-open-to-public,但可能我做錯了什么或誤解了什么。
我的docker-compose.yml:
version: "2.1"
services:
nginx:
build: ./nginx/
ports:
- 80:80
links:
- php
volumes:
- "${PROJECT_ROOT}:/var/www/html:ro"
networks:
- server
depends_on:
- php
php:
build: ./php/
expose:
- 9000
links:
- ssh_mysql
volumes:
- "${PROJECT_ROOT}:/var/www/html"
- "${SSH_FOLDER}:/root/.ssh"
networks:
- database
- server
depends_on:
- ssh_mysql
ssh_mysql:
build: ./mysql/
expose:
- 33306
networks:
- database
volumes:
- "${SSH_FOLDER}/id_rsa:/root/.ssh"
volumes:
data:
networks:
database:
server:
因此,您的問題是將SSH隧道綁定到127.0.0.1,因此將localhost和localhost僅用於具有SSH隧道的容器,因此您可以從該容器內部訪問隧道,而不能從其他容器訪問隧道。
要解決此問題,您應該執行本文中所述的操作: 我可以在Docker容器內獲取IP地址嗎?
所以像
ssh user@example.com -4 -L 33306:$(awk 'END{print $1}' /etc/hosts):3306 -N
應該做的工作。
似乎用以下方式打開ssh-tunnel
ssh user@host -4 -L 3307:0.0.0.0:3306 -N -g
(特別是-g
標志)
有所作為...
然后,我可以通過調用以下命令通過另一個容器的SSH隧道訪問遠程服務器上的MySQL數據庫:
$ mysql -h ssh_mysql -u mysql_user -p -P 3307
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.