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

3

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

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

Шаги

Это только один из способов получить сообщение об ошибке ниже.

  • docker.io pull tutum/mysql: последняя
  • docker.io run -it tutum/mysql bash
  • После присоединения к новому контейнеру запустите "/run.sh" (в соответствии с файлом dutter файла tutum/mysql)
  • На этом этапе постоянно повторяется сообщение "Ожидание подтверждения запуска MySQL".
  • В этот момент, если я отменил команду "/run.sh" и запустил MySQL, я получаю сообщение об ошибке ниже.

Вывод:

root @1bbeb34f3491:/# mysqld

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

140730 4:49:04 [Warning] Использование уникального опционного префикса myisam-recover вместо myisam-recover-options устарело и будет удалено в будущей версии. Вместо этого используйте полное имя.

140730 4:49:04 [Примечание] Плагин 'FEDERATED' отключен.

mysqld: таблица mysql.plugin не существует

140730 4:49:04 [ERROR] Не удается открыть таблицу 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: использование автономного AIO для Linux

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 [ERROR] У вас уже есть другой сервер 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

FATAL ERROR: Ошибка обновления

  • "У вас уже есть другой сервер mysqld, запущенный в socket" = > Nope. Запуск службы mysql stop ничего не делает, и запуск ps не показывает mysqld. Запуск ls -a/var/run/mysqld/предполагает, что файл сокета не существует.

Независимо от того, какой контейнер 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 по ip-адресу в MYSQL_PORT_3306_TCP_ADDR, но это тоже не сработает.

В равной степени проблема может заключаться в том, что я не понимаю, как работает Docker. Если это так, может кто-то создать набор шагов, который использует один из контейнеров MySQL в индексе Docker, а затем связать контейнер с ним, который может подключиться. Это также поможет выяснить, что-то не так с моей установкой Docker (или какой-либо другой неизвестной проблемой, которая вызывает эту проблему).

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

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

Спасибо, JamesStewy

  • 0
    Я думаю, что этот вопрос может быть лучше подходит для Unix и Linux Stack Exchange
  • 0
    Конечно: unix.stackexchange.com/questions/147786/… .
Показать ещё 4 комментария
Теги:
docker

1 ответ

0

Это работает для меня: docker run -d -p 3306:3306 -e MYSQL_PASS="mypass" tutum/mysql

Не нужно запускать script из bash, не нужно ничего умного.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню