dockerコンテナ内からlocalhostのMySQLにつなぐときに少しつまずいたので、自分用備忘録。
コンテナ内からローカルホストにつなぐ方法
解決策:DNS名にhost.docker.internal
を用いる。
実際に試す方法
ローカルになんらかの方法でmysql-serverがインストールされていて、起動されていることを前提に進める。
まず、mysql-cliの入ったubuntuのコンテナイメージを作成するため、以下のDockerfileを作成。
Dockerfile
# 利用するイメージ
FROM ubuntu
# mysql-clientをインストール
RUN apt-get update && apt-get install -y mysql-client
そして、localhost-testという名前でbuild。
$ docker build -t localhost-test .
以下のコマンドで
$ docker image ls
image listを見てみるとlocalhost-testというイメージができていることが確認できる。
よってコンテナを起動して、中に入ります。
$ docker run -it localhost-test /bin/bash
そして、mysqlコマンドを実行し、ホスト名host.docker.internal
でローカルホストのMySQLに繋がるか確認。
# mysql -u root -h host.docker.internal -p
Enter password: [パスワードを入力]
mysql>
このようにローカルホストのMySQLに繋がるはず。 ホスト名をlocalhost
や127.0.0.1
にしても、繋がらないということを確認してみても面白いはずです。