【问题标题】:Running MySQL in a Docker container在 Docker 容器中运行 MySQL
【发布时间】:2014-09-24 01:04:54
【问题描述】:

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

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

步骤

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

  1. docker.io pull tutum/mysql:latest
  2. docker.io run -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 atomic builtins

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_PORT_3306_TCP_ADDR 中 IP 地址上的 MySQL 容器,但这也不起作用。

同样的问题可能是我不了解 Docker 的工作原理。如果是这种情况,有人可以创建一组步骤,使用 Docker 索引上的一个 MySQL 容器,然后将一个容器链接到可以连接的容器。这也将有助于查看我的 Docker 安装是否有问题(或导致此问题的其他未知问题)。

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

我不太确定该解释什么,因为这个问题对我来说似乎很奇怪。如果有什么遗漏的请追问,我会为你补充。

谢谢, 詹姆斯斯蒂维

【问题讨论】:

  • 我觉得这个问题可能更适合Unix & Linux Stack Exchange
  • 想知道:你的主机是什么?你用的是本地真机还是云VPS?你说你使用 docker 0.9.1,你应该尝试一个更新的(我猜大概是 1.1.1)来仔细检查这与错误无关。
  • 这是一台直接安装了 Ubuntu 14.04 的物理本地机器。昨天我意识到我的 Docker 版本远远落后,但由于某种原因,apt-get 上的 Docker 包只有 0.9.1 版本。所以我按照这些说明(askubuntu.com/a/473720/89270),现在正在运行 1.1.2。不幸的是,这并没有改变任何东西。
  • @JamesStewy,你能弄清楚这个吗?我也面临同样的问题。

标签: mysql ubuntu docker


【解决方案1】:

这对我有用: docker run -d -p 3306:3306 -e MYSQL_PASS="mypass" tutum/mysql

不需要从 bash 运行脚本,不需要任何聪明的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 2015-03-05
    • 1970-01-01
    • 2021-03-04
    相关资源
    最近更新 更多