【发布时间】:2014-09-24 01:04:54
【问题描述】:
所以我的最终目标是运行一个 MySQL Docker 容器(比如来自公共注册表的 tutum/mysql),然后将一个 Gitlab Docker 容器(比如 sameersbn/gitlab)链接到它,其中两个容器都使用持久存储。
但是,我被困在 MySQL 部分。每次我尝试运行如下所述的预制 MySQL Docker 容器(mysql、tutum/mysql 和 sameersbn/mysql)时,都会得到以下输出。
步骤
这只是获取以下错误消息的一种方式。
- docker.io pull tutum/mysql:latest
- docker.io run -it tutum/mysql bash
- 一旦附加到新容器运行“/run.sh”(根据 tutum/mysql dockerfile)
- 此时“等待确认 MySQL 服务启动”消息不断重复。
- 此时,如果我取消“/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,你能弄清楚这个吗?我也面临同样的问题。