Dockerの公式MySQLイメージを使ってホストからアクセスするまで
Dockerわかってる人には単純な話かと思いますが、一部ハマったのでメモ。
やりたいこと
mysql Repository | Docker Hub Registry - Repositories of Docker Images
こちらのイメージを利用する。
dockerはインストール済とする。
公式MySQLイメージをpullする
今回はバージョン5.5を利用。
$ docker pull mysql:5.5 $ docker ps REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE mysql 5.5 c8defdc7b8fa 6 days ago 214.7 MB
コンテナを起動する
MYSQL_ROOT_PASSWORDという環境変数でrootパスワードを設定する。
その他の環境変数は公式参照。
外部から接続するには、-p [ホスト側ポート]:[コンテナ側ポート]でポートを公開する必要があるとのこと。
今回はホストの13306でコンテナの3306ポートに接続する。
ここで問題発生。
最初、
$ docker run --name mysql -e MYSQL_ROOT_PASSWORD=mysql -d mysql:5.5 -p 13306:3306
としていたが、これだとすぐにコンテナがエラーで終了してしまった。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ログを確認する。
$ docker logs mysql ... 150314 15:00:05 [ERROR] mysqld: unknown option '-p' 150314 15:00:05 [ERROR] Aborting 150314 15:00:05 InnoDB: Starting shutdown... 150314 15:00:06 InnoDB: Shutdown completed; log sequence number 1595675 150314 15:00:06 [Note] mysqld: Shutdown complete
mysqldに-pオプションが渡ってしまっている模様。
考えてみると当たり前だが、最後に-pオプションを指定していたのがまずかった。
-pオプションの場所を変更すると起動成功。
$ docker run --name mysql -e MYSQL_ROOT_PASSWORD=mysql -d -p 13306:3306 mysql:5.5 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5289e9512b4e mysql:5.5 "/entrypoint.sh mysq 47 seconds ago Up 46 seconds 0.0.0.0:13306->3306/tcp mysql
ホストから接続する
ホストからlocalhostの13306ポートに接続すればよい。
パスワードは上の例では"mysql"。
$ mysql -u root -p -h 127.0.0.1 -P 13306 Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.5.42 MySQL Community Server (GPL) Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
無事接続成功。