2017-02-12 118 views
4

當我嘗試通過SSH隧道連接到主機Mashine(vServer),然後嘗試通過內部Docker Container-IP進行連接時,我無法連接到MySQL。如何通過SSH連接到MySQL Docker容器?

這是我的docker-compose文件。

version: '2' 
services: 
    mysql: 
    build: ./mysql 
    environment: 
     MYSQL_ROOT_PASSWORD: test 
    volumes: 
     - ./db:/var/lib/mysql 

我發現的唯一解決方案是將mysql容器的MySQL-Port轉發到Host-Mashine。

version: '2' 
services: 
    mysql: 
    build: ./mysql 
    environment: 
     MYSQL_ROOT_PASSWORD: test 
    volumes: 
     - ./db:/var/lib/mysql 
    ports: 
    - 3306:3306 

然後我能夠通過主機IP連接到MySQL,但這是沒有SSH它直接通過TCP和端口。 對於我來說,將MySQL服務帶入互聯網是一件不容易的事。

可以在這裏找到原因https://security.stackexchange.com/questions/63881/is-it-not-safe-to-open-mysqls-port-to-the-internet爲什麼把你的mysql端口帶入互聯網並不是一個好的做法。


那麼什麼是一個很好的做法,連接到我的碼頭mysql容器與SSH,但保持MySQL端口關閉?

回答

7

一種簡單的方法是將MySQL端口綁定到本地主機地址。假設主機有一個可用於Docker之外的mysql客戶端。

ports: 
    - 127.0.0.1:3306:3306 

你也可以省略ports部分完全(無端口綁定在所有),並使用MySQL客戶端這是已經在容器內。

docker-compose exec mysql bash 

然後在容器中運行mysql命令,以執行您想要執行的任何查詢。

+1

第一個建議爲我解決了這個問題,現在我可以通過SSH通過HeidiSQL連接到我的MySQL-Container,而無需付出很多努力。你的第二個建議對小事很好,但我喜歡我的GUI HeidiSQL。 – TatzyXY

3

一個簡單的方法來實現,這是在泊塢窗conatiner的SSH端口轉發到你的主機上的一些端口,即

ports: 
    - 22:<some free host port> 

,然後通過SSH訪問容器您使用的主機端口。請注意,使用端口22是一個壞主意,因爲這會導致與主機上運行的ssh服務器發生衝突。

+0

這也是一個很好的答案,但目前我的目的有點矯枉過正。然後,我必須dockerize ssh服務並使其可以訪問其他容器。起初我會和Dan Lowe的回答保持一致,但是當項目變得更大時,你的答案可能就是要走的路。 – TatzyXY

+0

有沒有必要dockerize ssh。你可以簡單地通過'ssh localhost:訪問容器' –

+0

@TobiasGuggenmos只有當sshd服務器在容器內監聽時,這在大多數容器中並不是這樣。 –

相關問題