在Docker容器中运行MySQL

时间:2014-07-31 22:18:55

标签: mysql ubuntu docker

所以我的最终目标是运行一个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. 此时a"等待确认MySQL服务启动"消息不断重复。
  5. 此时如果取消" /run.sh"命令并自己启动MySQL我收到以下错误信息。
  6. 输出:

      

    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:Mutexes和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 [注意]服务器主机名(bind-address):' 0.0.0.0&#39 ;;港口: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' as:mysql

         

    寻找' mysqlcheck' as:mysqlcheck

         

    致命错误:升级失败

    • "你是否已经在socket&#34上运行了另一个mysqld服务器? =>不。运行服务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。

    我不太清楚在这个解释中应该放什么,因为这个问题对我来说似乎很奇怪。如果有什么我错过了请问,我会为你添加。

    谢谢, JamesStewy

1 个答案:

答案 0 :(得分:0)

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

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