2017-02-12 22 views
4

SSH経由でホストマシーン(vServer)にトンネルしようとすると、内部ドッカーのContainer-IP経由で接続しようとすると、MySQLに接続できません。SSH経由でMySQL Dockerコンテナに接続する方法は?

これは私のドッカー作成ファイルです。

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

私が見つけた唯一の解決策は、ホストMashineにmysqlのコンテナのMySQLのポートを転送するようにしました。

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

それから私は、MySQLにホストIP経由で接続することができていますが、これは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

単純な方法の1つは、MySQLポートをローカルホストのアドレスにのみバインドすることです。これは、ホストがDockerの外部で利用可能なmysqlクライアントを持っていることを前提としています。

ports: 
    - 127.0.0.1:3306:3306 

また、(何のポートが全く結合しない)完全portsセクションを省略し、容器内の既にだmysqlクライアントを使用することができます。

docker-compose exec mysql bash 

次に、コンテナ内でmysqlコマンドを実行して、実行するクエリを実行します。

+1

最初の提案が私のために修正されました。今は、SSH経由でHeidiSQL経由でMySQLコンテナに接続することができます。あなたの2番目の提案は小さなものには良いですが、私は自分のGUI HeidiSQLが好きです。 – TatzyXY

3

これを達成するための簡単な方法は、お使いのホスト上のいくつかのポートにドッキングウィンドウのconatinerのsshのポートを転送すなわち

ports: 
    - 22:<some free host port> 

、その後、あなたが使用するホストポートにssh経由でコンテナにアクセスすることです。ポート22を使用することは悪い考えです。これは、ホスト上で実行されているsshサーバーと競合するためです。

+0

これは良い答えですが、現時点で私の目的のために少し過剰です。それから、sshサービスをドッキングして他のコンテナにアクセスできるようにする必要があります。最初はDan Loweの答えにとどまりますが、プロジェクトがより大きくなると、あなたの答えはおそらく行く方法になります。 – TatzyXY

+0

sshをドッキングする必要はありません。 'ssh localhost:' –

+0

@TobiasGuggenmos sshdサーバがコンテナの内部をリッスンしている場合に限り、ほとんどのコンテナではそうではありません。 –

関連する問題