【问题标题】:Unable to connect to mysql docker container无法连接到 mysql docker 容器
【发布时间】:2016-04-26 19:44:55
【问题描述】:

我有一个正在处理的 Dockerfile,它可以提取 Mysql 5.6 并对其进行配置(主要使用 bash 和 sql 脚本)。我能够构建和运行它,但是当我尝试连接到容器中的数据库时,我总是得到:

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

我已尝试使用以下方法访问 mysql 数据库:

mysql -u root -p

mysql -u root -h 127.0.0.1 -p

我已经尝试了所有我能想到的方法并在互联网上查找了文章,但没有任何效果。有人能告诉我为什么吗?这里分别是我的 Dockerfile 和 bash 脚本:

FROM mysql:5.6

MAINTAINER Ryan K.
USER root

ADD mysqlAddUser.sh /tmp/
CMD ["/tmp/mysqlAddUser.sh"]
ADD foo.sql /docker-entrypoint-initdb.d/foo.sql

EXPOSE 3306

## Starting mysqld and running Database Scripts
CMD ["/usr/bin/mysqld_safe"]

Bash 脚本:

#!/bin/bash
DATABASE_PASSWORD=test

/usr/bin/mysqld_safe &
mysqladmin --login-path=local -uroot -p"$DATABASE_PASSWORD"
mysqladmin password "$DATABASE_PASSWORD"

mysql -uroot -p"$DATABASE_PASSWORD" -e "UPDATE mysql.user SET Password=PASSWORD('$DATABASE_PASSWORD') WHERE User='root'"
mysql -uroot -p"$DATABASE_PASSWORD" -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1')"
mysql -uroot -p"$DATABASE_PASSWORD" -e "DELETE FROM mysql.user WHERE User=''"
mysql -uroot -p"$DATABASE_PASSWORD" -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%'"
mysql -uroot -p"$DATABASE_PASSWORD" -e "FLUSH PRIVILEGES"

DB_ROOT_PASS=TEST
DB=portal

mysql --login-path=local -uroot -p"$DB_ROOT_PASS"
mysql -uroot -p"$DATABASE_PASWORD" -e "CREATE DATABASE portal";
mysql -uroot -p"$DATABASE_PASSWORD" -e "CREATE USER portaluser@'localhost' IDENTIFIED BY 'testing'";
mysql -uroot -p"$DATABASE_PASSWORD" -e "GRANT ALL PRIVILEGES ON portal.* TO portaluser@'localhost'";
mysql -uroot -p"$DATABASE_PASSWORD" -e "FLUSH PRIVILEGES";

mysql -uroot -p"$DATABASE_PASSWORD" $DB < /tmp/foo.sql

【问题讨论】:

  • 套接字存在于容器中。如果您从容器外部连接,则必须向主机提供-h,以便 mysql 可以找到您的数据库。
  • 我从容器内访问它。基本上在 /bin/bash 中运行容器并尝试使用 mysql -u root -p 从那里访问数据库
  • 容器中该路径是否存在套接字?
  • 上次我没有检查。

标签: mysql bash docker


【解决方案1】:

在 docker 容器中遇到与 mysql 相同的问题。有时我可以连接到 mysql 客户端,但更多时候不能。切换到 mariadb 遇到了同样的问题。

似乎为我解决了这个问题的是在我的脚本中添加一些睡眠命令来创建、启动和销毁 docker 容器。在“docker run”和“docker stop”之类的命令之后,我添加了“sleep 10”,这似乎有帮助。

【讨论】:

  • 感谢您提供的信息。我实际上发现了为什么会发生这种情况。原因是因为我有一个只分配了 1GB 虚拟内存的 Ubuntu 虚拟机。这肯定会导致问题,尤其是如果我有一个运行 Tomcat 的容器。
猜你喜欢
  • 2016-07-22
  • 2020-12-30
  • 2020-07-29
  • 2022-11-18
  • 1970-01-01
  • 2019-04-01
  • 2017-08-10
  • 1970-01-01
  • 2019-07-22
相关资源
最近更新 更多