所以我的最终目标是运行一个 MySQL Docker 容器(比如来自公共注册表的 tutum/mysql),然后将一个 Gitlab Docker 容器(比如 sameersbn/gitlab)链接到它,其中两个容器都使用持久存储。
但是,我在 MySQL 部分遇到了问题。每次我尝试运行预制的 MySQL Docker 容器(mysql、tutum/mysql 和 sameersbn/mysql)时(如下所述),我都会得到以下输出。
脚步
这只是获取以下错误消息的一种方法。
- docker.io 拉取 tutum/mysql:latest
- docker.io 运行 -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 原子内置函数
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,但似乎有效。很想听到更好的解决方法。