30
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

dockerコンテナからローカル上のmysqlに接続する(docker ver17.06以降)

Last updated at Posted at 2017-12-08

諸事情によりローカルに作ったmysqlにdockerコンテナから接続する必要があったので調べました。

2022/01/27追記

Docker desktop4.3.0において、記事で紹介しているdocker.for.win.localhostdocker.for.mac.localhost両方ともは非推奨になりました。(なぜかwindowsのリリースノートもmac用のDNSが乗ってますが……)

今後は変わりに以下のDNSにアクセスすれば良いとのことなので、記事は適宜読み替えるようおねがいします。macもwindowsも一緒になって便利ですね。
ただし、あくまでこれは開発用に利用するDNS名であり、Docker for WindowsおよびDocker for Mac以外では動作しないとのことなのでご注意ください。

host.docker.internal

追記が遅れてすまねえ……。

環境

  • Windows 10 Enterprise
  • mysql 5.6.36
  • Docker for windows
  • Docker 17.09.0-ce

接続方法

dockerのバージョンが17.06以降であればこれでOKです。

mysql -h docker.for.win.localhost -u root

macの場合は(おそらく)こちらでいけるはずです。

mysql -h docker.for.mac.localhost -u root

dockerのバージョンが17.05以下の場合はこちらでは取り扱いません。軽く調べてそっとブラウザを閉じたくなりました。17.06で追加された機能が便利すぎます。
mysql側での準備についてですが、おそらく不要です。少なくとも自分の環境では、bind-addressが127.0.0.1のみに設定されている状態でも、問題なく接続することができました。

docker.for.win.localhost

さらっと使ったdocker.for.win.localhostおよびdocker.for.mac.localhostとは何ぞや?というお話ですが、これはDockerのver17.06にて追加されたローカルホスト用DNS名だそうです。これをmysqlのホスト名に指定すれば、ローカルのmysqlを実行することができます。
他のサービスにおいても、同様にローカルを指すことができるはずです。
ですがどうやら、docker.for.win.localhost:80のような感じで、ポートを指定している他のコンテナに続することにも使えるらしく、こちらの使い方の方が本命っぽいです。

参考サイト

30
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?