2017-05-02 11 views
0

MySQLデータベースを必要とするアプリケーションの設定手順を書いていますが、 MySQLインストール。コンテナのIPアドレスを必要とせずにホストマシンからDocker MySQLサーバにアクセスする

docker run -p 3306:3306 \ 
    --name mysql \ 
    -e MYSQL_ROOT_PASSWORD=test \ 
    -e MYSQL_DATABASE=my_db \ 
    -d mysql 

そして、それには、この方法で接続できるようにする::

したがって、私は、コンテナ内のMySQLサーバを実行したいと思います

mysql -u root -ptest -D my_db 

ので動作しません。 MySQLサーバはコンテナのローカルでのみリッスンします。

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 

は、だから私は私のニーズにフィットいずれも3つのオプションは、以下を参照してください

1)

mysql -u root -ptest -D my_db -h 172.17.0.4 

迷惑なコンテナIP毎回を使用し、IPが頻繁に変更され、Iドン人々がこれほど多くの設定を更新しなければならないようにしたい。コンテナ

内のMySQLの設定を変更する

2)docker exec ...にコンテナが実行されるたびに実行するために必要なので、それは同様に迷惑なんです。

3)ビットの行き過ぎに思える設定が

私のニーズに合ったカスタムイメージを作り、私はよりよい解決策があるとかなり確信しています。

思考?あなたが行ったようにmysqlクライアントが起動される

答えて

2

mysql -u root -ptest -D my_db 

(すなわち、ホスト名なし)、または、それはUnixのパイプを使用して、ローカルサーバーに接続しようとするホスト名としてlocalhostを持ちます。パイプは特殊なファイルタイプであり、クライアントはそれを介してサーバーと通信します。

あなたのMySQLサーバはローカルではなく、別のマシン上で動作します。パイプを使用して接続することはできません。

すでに気付いたように、-hコマンドラインオプションmysqlの引数としてコンテナのIPアドレスを使用すると、このコマンドが機能します。

また、コンテナのポート3306をホストマシンのポート3306にマッピングします。つまり、ローカルマシンのポート3306へのTCP接続は、このマッピングを介して、MySQLサーバがリスンしているコンテナのポート3306になります。

mysql -u root -ptest -D my_db -h 127.0.0.1 
:上記の2、あなたがしなければならないすべては mysqlコマンドラインでホスト名として 127.0.0.1を置くことである組み合わせ

関連する問題