Итак, моя конечная цель - запустить контейнер MySQL Docker (скажем, tutum / mysql из общедоступного реестра), а затем связать с ним контейнер Gitlab Docker (скажем, sameersbn / gitlab), где оба контейнера используют постоянное хранилище.
Однако я застрял в части MySQL. Каждый раз, когда я пытаюсь запустить предварительно созданный контейнер MySQL Docker (mysql, tutum / mysql и sameersbn / 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, что довольно неэлегантно, но, похоже, работает. Хотелось бы услышать лучший способ обхода.