在 Docker 容器中运行 MySQL

在 Docker 容器中运行 MySQL

所以我的最终目标是运行一个 MySQL Docker 容器(比如来自公共注册表的 tutum/mysql),然后将一个 Gitlab Docker 容器(比如 sameersbn/gitlab)链接到它,其中两个容器都使用持久存储。

但是,我在 MySQL 部分遇到了问题。每次我尝试运行预制的 MySQL Docker 容器(mysql、tutum/mysql 和 sameersbn/mysql)时(如下所述),我都会得到以下输出。

脚步

这只是获取以下错误消息的一种方法。

  1. docker.io 拉取 tutum/mysql:latest
  2. docker.io 运行 -it tutum/mysql bash
  3. 一旦连接到新容器,运行“/run.sh”(根据tutum/mysql dockerfile)
  4. 此时“等待确认 MySQL 服务启动”消息不断重复。
  5. 此时,如果我取消“/run.sh”命令并自行启动 MySQL,我会收到以下错误消息。

输出:

root@1bbeb34f3491:/#mysqld

140730 4:49:04 [警告] 使用唯一选项前缀 key_buffer 代替 key_buffer_size 的做法已被弃用,并将在将来的版本中被删除。请使用全名。

140730 4:49:04 [警告] 使用唯一选项前缀 myisam-recover 代替 myisam-recover-options 的做法已被弃用,并将在将来的版本中删除。请使用全名。

140730 4:49:04 [注意] 插件‘FEDERATED’已被禁用。

mysqld:表‘mysql.plugin’不存在

140730 4:49:04 [错误] 无法打开 mysql.plugin 表。请运行 mysql_upgrade 来创建它。

140730 4:49:04 InnoDB:InnoDB 内存堆已禁用

140730 4:49:04 InnoDB:互斥锁和 rw_locks 使用 GCC 原子内置函数

140730 4:49:04 InnoDB:压缩表使用 zlib 1.2.8

140730 4:49:04 InnoDB:使用 Linux 原生 AIO

140730 4:49:04 InnoDB:初始化缓冲池,大小 = 128.0M

140730 4:49:04 InnoDB:缓冲池初始化完成

140730 4:49:04 InnoDB:支持的最高文件格式是 Barracuda。

140730 4:49:04 InnoDB:等待后台线程启动

140730 4:49:05 InnoDB:5.5.37 已启动;日志序列号 1595675

140730 4:49:05 [注意] 服务器主机名(绑定地址):'0.0.0.0';端口:3306

140730 4:49:05 [注意] - ‘0.0.0.0’解析为‘0.0.0.0’;

140730 4:49:05 [注意] 在 IP '0.0.0.0' 上创建服务器套接字。

140730 4:49:05 [错误] 无法启动服务器:绑定在 unix 套接字上:权限被拒绝

140730 4:49:05 [错误] 您是否已在套接字 /var/run/mysqld/mysqld.sock 上运行另一个 mysqld 服务器?

140730 4:49:05 [错误] 正在中止

140730 4:49:05 InnoDB:正在开始关机... 140730 4:49:06 InnoDB:关机完成;日志序列号 1595675 140730 4:49:06 [注意] mysqld:关机完成

解决错误

  • “请运行 mysql_upgrade 来创建它” => 运行 mysql_upgrade 命令并输出

root@1bbeb34f3491:/#mysql_upgrade

查找“mysql”为:mysql

正在查找“mysqlcheck”为:mysqlcheck

严重错误:升级失败

  • “您是否已经在套接字上运行了另一个 mysqld 服务器” => 没有。运行 service mysql stop 没有任何作用,运行 ps 也没有显示 mysqld。运行 ls -a /var/run/mysqld/ 表明套接字文件不存在。

无论我尝试哪个 MySQL 容器,最终当我启动 MySQL 时都会出现相同的错误消息。这几乎肯定意味着我的设置有问题,这让我很困惑,因为我认为没有公开端口或持久存储的 Docker 容器会与安装 Docker 的系统隔离?

我还尝试使用 -d 标志运行 MySQL 容器,然后运行链接到它的全新 ubuntu 14.04 容器 (docker.io run -it --link mysql:mysql ubuntu:14.04 bash)。在 Ubuntu 容器上,我通过 apt-get 安装了 mysql-client,并尝试连接到 MySQL 容器,但这也不起作用。

我的主机系统运行的是 Ubuntu 14.04,并且 Docker 是通过 apt-get 安装的,版本是 0.9.1。

我不太确定这个解释中应该写些什么,因为这个问题对我来说似乎很奇怪。如果我遗漏了什么,请提出来,我会为您添加。

谢谢,JamesStewy

编辑 如果有人可以创建一组指令,创建一个 MySQL 容器和一个链接容器并为它们工作,那么我可以尝试一下。

答案1

使用 sameersbn/mysql

我不相信你可以以交互方式运行它。

docker run --name mysql -d sameersbn/mysql:latest

因此,您只需将其作为守护进程运行,检查容器以查找 IP 地址,如下所示:

docker inspect mysql | grep IPAddres

然后你就可以通过该IP连接到mysql了。

答案2

我们遇到了同样的问题 - 似乎您需要等待 mysql 启动(或至少启动侦听器)。否则您将遇到 2013 年的问题。我们刚刚添加了 sleep 60,这是一个相当不雅的 hack,但似乎有效。很想听到更好的解决方法。

相关内容