在 Docker 容器中运行 MySQL

Jam*_*ewy 6 mysql ubuntu docker

所以我的最终目标是运行一个 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 [注意] 插件“联邦”被禁用。

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:支持的最高文件格式是梭子鱼。

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 [错误] 您是否已经在套接字上运行了另一个 mysqld 服务器:/var/run/mysqld/mysqld.sock?

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。

我不太确定在这个解释中放什么,因为这个问题对我来说似乎很奇怪。如果有什么我遗漏了,请询问,我会为您添加。

谢谢,詹姆斯·斯威

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

小智 2

使用 Sameersbn/mysql

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

docker run --name mysql -d sameersbn/mysql:latest
Run Code Online (Sandbox Code Playgroud)

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

docker inspect mysql | grep IPAddres
Run Code Online (Sandbox Code Playgroud)

然后你就可以连接到该IP上的mysql。