Назад | Перейти на главную страницу

Запуск MySQL в контейнере Docker

Итак, моя конечная цель - запустить контейнер MySQL Docker (скажем, tutum / mysql из общедоступного реестра), а затем связать с ним контейнер Gitlab Docker (скажем, sameersbn / gitlab), где оба контейнера используют постоянное хранилище.

Однако я застрял в части MySQL. Каждый раз, когда я пытаюсь запустить предварительно созданный контейнер MySQL Docker (mysql, tutum / mysql и sameersbn / mysql), как описано ниже, я получаю следующий результат.

Шаги

Это всего лишь один из способов добраться до сообщения об ошибке ниже.

  1. docker.io вытащить tutum / mysql: последний
  2. docker.io запустить -it tutum / mysql bash
  3. После присоединения к новому контейнеру запустите "/run.sh" (согласно dockerfile tutum / mysql)
  4. В этот момент постоянно повторяется сообщение «Ожидание подтверждения запуска службы MySQL».
  5. На этом этапе, если я отменяю команду «/run.sh» и сам запускаю MySQL, я получаю сообщение об ошибке ниже.

Вывод:

корень @ 1bbeb34f3491: / # mysqld

140730 4:49:04 [Предупреждение] Использование уникального префикса опции key_buffer вместо key_buffer_size устарело и будет удалено в будущем выпуске. Пожалуйста, используйте вместо этого полное имя.

140730 4:49:04 [Предупреждение] Использование уникального префикса опции myisam-recovery вместо myisam-recovery-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 [ОШИБКА] У вас уже есть другой сервер mysqld, работающий на сокете: /var/run/mysqld/mysqld.sock?

140730 4:49:05 [ERROR] Прерывание

140730 4:49:05 InnoDB: запуск выключения ... 140730 4:49:06 InnoDB: выключение завершено; порядковый номер журнала 1595675 140730 4:49:06 [Примечание] mysqld: Завершение работы

Устранение ошибок

корень @ 1bbeb34f3491: / # mysql_upgrade

Ищем mysql как: mysql

Ищем mysqlcheck как: mysqlcheck

ФАТИЧЕСКАЯ ОШИБКА: не удалось выполнить обновление.

Независимо от того, какой контейнер MySQL я пробую, в конце концов, когда я запускаю MySQL, появляется такое же сообщение об ошибке. Это почти наверняка означает, что с моей настройкой что-то не так, что меня смущает, потому что я думал, что контейнер Docker без открытых портов или постоянного хранилища будет изолирован от системы, в которой установлен Docker?

Я также попытался запустить контейнер MySQL с флагом -d, а затем запустить новый контейнер ubuntu 14.04 (docker.io run -it --link mysql: mysql ubuntu: 14.04 bash), связанный с ним. В контейнере Ubuntu я установил mysql-client через apt-get и попытался подключиться к контейнеру MySQL, но это тоже не сработало.

Моя хост-система работает под управлением Ubuntu 14.04, а Docker был установлен через apt-get и имеет версию 0.9.1.

Я не совсем понимал, что вкладывать в это объяснение, потому что проблема кажется мне довольно странной. Если я что-то пропустил, спросите, и я добавлю это для вас.

Спасибо, Джеймс Стюи

РЕДАКТИРОВАТЬ Если бы кто-то мог создать набор инструкций, который создает один контейнер MySQL и один связанный контейнер и работает для них, я могу попробовать.

С помощью sameersbn / mysql

Я не верю, что вы можете запустить его в интерактивном режиме.

docker run --name mysql -d sameersbn/mysql:latest

Итак, вы просто запускаете его как демон, проверяете контейнер, чтобы найти IP-адрес следующим образом:

docker inspect mysql | grep IPAddres

а затем вы можете подключиться к mysql по этому IP-адресу.

У нас была такая же проблема - похоже, вам нужно дождаться запуска mysql (или, по крайней мере, запустить слушателей). В противном случае вы получите выпуск 2013 года, который у вас есть. Мы только что добавили sleep 60, что довольно неэлегантно, но, похоже, работает. Хотелось бы услышать лучший способ обхода.