1. ホーム
  2. mysql

[解決済み] ホストからDockerコンテナ内のmysqlに接続する

2022-04-20 23:32:13

質問内容

(Dockerやmysqlの管理に関する知識が乏しいため、馬鹿な質問かもしれませんが、この問題に一晩中費やしたので、あえて質問させていただきます)。

一言で言うと

dockerコンテナでmysqlを実行し、私のホストからそれに接続したいです。これまでのところ、私が達成した最高のものは、次のとおりです。

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

詳細

私は以下のように使っています。 Dockerfile :

FROM ubuntu:14.04.3
RUN apt-get update && apt-get install -y mysql-server

# Ensure we won't bind to localhost only
RUN grep -v bind-address /etc/mysql/my.cnf > temp.txt \
  && mv temp.txt /etc/mysql/my.cnf

# It doesn't seem needed since I'll use -p, but it can't hurt
EXPOSE 3306

CMD /etc/init.d/mysql start && tail -F /var/log/mysql.log

このファイルがあるディレクトリで、イメージのビルドに成功し、実行することができます。

> docker build -t my-image .
> docker run -d -p 12345:3306 my-image

画像に添付すると、問題なく動作しているようです。

# from the host
> docker exec -it <my_image_name> bash

#inside of the container now
$ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
[...]

しかし、ホストの成功率はそれほど高くはありません。

> mysql -P 12345 -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

さらに詳しく

  • という質問があるのを見かけました。 私のような . しかし、それは同じではありません(そして、それはとにかく答えを持っていません)。
    • という画像があるのを見たことがあります。 mysql専用 しかし、私はそれ以上の成功を収められませんでした。
    • 私の grep -v は変に感じるかもしれません。確かに、もっときれいなやり方があるかもしれません。しかし、私の画像を添付すると、実際に期待通りに動作していることがわかります。 bind-address ). そして、コンテナの中にある /var/log/mysql/error.log :

サーバーのホスト名(bind-address): '0.0.0.0'; ポート。3306 - '0.0.0.0' は '0.0.0.0' に解決されます。 サーバーソケットがIP: '0.0.0.0' に作成されました。

解決方法は?

ローカルホストの代わりに127.0.0.1"を使用すると、mysqlはtcpメソッドを使用し、コンテナに接続することができるようになるはずです。

mysql -h 127.0.0.1 -P 3306 -u root