2016-06-29 11 views
3

Mac OS Xの場合El Capitan。ローカルホスト(Docker for Macベータ版)のDockerでMySQLに接続できません

Docker Toolboxを使用するために使用します。それを削除し、Docker for Macベータ版をインストールしました。 (私は、取り外しと取り付けがきれいだと思います。)

は基本的に、このようにMySQLサーバのコンテナを起動する:

docker run -e MYSQL_ROOT_PASSWORD=1234 -d mysql:5.7.13 

(やMySQL/MySQLのサーバー:5.7.13)。打ち上げは、「標準」の方法、ホスト127.0.0.1、根、1234ガット助けていない-p 3306:3306を使用して

Unable to connect to host 127.0.0.1 because access was denied. 

Double-check your username and password and ensure that access from your current location is permitted. 

MySQL said: Access denied for user 'root'@'localhost' (using password: YES) 

を経て、私はプロの続編からこのサーバーに接続しようとしたfine.Thenのようです。

それは私が192.168.99.100をホストするために

docker run \ 
     -e MYSQL_ROOT_PASSWORD=1234 \ 
     -d \ 
     --expose 3306 \ 
     -p 3306:3306 \ 
     mysql:5.7.12 

と接続されているが立ち上げたドッカーツールボックスで作業するために使用。それはうまくいった。

インストール中にDocker for Macの「移行」が行われたと思われます(新しいVMに既存のDockerの内容をコピーすると)古いデータ(古いMySQLコンテナ)が残っているかもしれませんが、 。

ありがとうございました!

+0

私はホストマシンにMySQLコマンドラインクライアントをインストールしたくないので、私は物事をテストするために 'mysql -h ...'を実行できません。 – zpz

+0

ポートを設定しましたか?あなたはDocker Toolboxを使って-pを使ってポートを3306:3306に設定していたと述べました。しかし、あなたはそれを上のあなたの命令に含めなかった。それがそうでなければ、私はif(ifconfigから)あなたのマシンのipを試してみることを勧めます...またはlocalhost。 – Nauraushaun

+0

ツールボックスのインストールで、私は '--expose'と' -p'で起動しました。 Sequel Proで私は '192.168.99.100'、 '3306'、 'root'、 '1234'を提供しました。それはうまくいった。 Docker for Macでは、 '--expose'と' -p'を使いませんでした。デーモンからのエラー応答:: '使用-p'は私に'ドッキングウィンドウを与えたドライバーがエンドポイントで外部接続をプログラミング失敗したローカル・ドッカ-mysqlの(d9816ec5bc57dfd29df475195f3ab7d5b52fc0527677f1e705eecc02ebdac973):エラーユーザーランドのプロキシを開始:既に使用中のTCP 0.0.0.0:3306アドレスをバインドできませんでした。 '公式MySQLドッカーのページの例では' -p'を使用していません。あなたは、MySQLは(ポート3306を使用することになります)お使いのMac上で – zpz

答えて

2

デフォルトのlocalhostではなく、他のホストからrootユーザーのアクセス権を設定したようです。

-p 3306:3306あなたはホストマシンからゲストにポート転送を作成するだけです。したがって、あなたのユーザーにあなたのhistマシン(172.17.0.1)からDBへの接続を許可することができます。

など。 #/ binに/ bashの

cd $(dirname $0) 

docker-compose up -d 

ROOT_PASSWORD=root 
CONTAINER=____mysql_container_name___ 
CHANGE_PASS_SQL="delete from mysql.user;grant all on *.* to 'root'@'%' identified by '${ROOT_PASSWORD}' with grant option;flush privileges;" 
CHANGE_PASS="docker exec -it ${CONTAINER} mysql -s -uroot -e \"${CHANGE_PASS_SQL}\" 2>/dev/null" 

WITH_PASS='echo "select now();" | docker exec -i ${CONTAINER} mysql -root -proot 1>&2 2>/dev/null' 
NO_PASS='echo "select now();" | docker exec -i ${CONTAINER} mysql -root 1>&2 2>/dev/null' 

WITH_PASS_EXIT_CODE=1000 
NO_PASS_EXIT_CODE=1000 

while [ ${WITH_PASS_EXIT_CODE} -gt 0 ];do 
    eval "${WITH_PASS}" 
    WITH_PASS_EXIT_CODE=$? 
    eval "${NO_PASS}" 
    NO_PASS_EXIT_CODE=$? 

    echo -n . 

    if [ ${NO_PASS_EXIT_CODE} -eq 0 ];then 
     eval "${CHANGE_PASS}" 
    else 
     sleep 1 
    fi 
done 

echo 

これが役立つことを願っています!私はそれを前に変更はありません場合は、rootのパスワードを変更し、次のダミーのコンテナの起動スクリプトを使用しています。

+1

解決済み。私の知識がなくても私のマシンでmysqlが動作していたことが分かりました。 Dockerの前にインストールされています。 ToolBox Dockerはlocalhostと競合しなかったため、問題は表示されませんでした。 mysql、boot2docker、VirtualBoxをクリーンアップしました。今それは働いている。 – zpz

関連する問題