2016-01-20 4 views
1

У меня есть файл Docker, над которым я работаю, который вытягивает Mysql 5.6 и настраивает его (в основном с помощью сценария bash и sql). Я могу построить и запустить его, но когда я пытаюсь подключиться к базе данных в контейнере я всегда получаю:Не удается подключиться к контейнеру docker mysql

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 

Я попытался получить доступ к базе данных MySQL с помощью:

mysql -u root -p

mysql -u root -h 127.0.0.1 -p

Я пробовал все, что мог придумать, и искал статьи в Интернете, но ничего не работает. Может кто-нибудь сказать мне, почему? Вот мой Dockerfile и Баш скрипт соответственно:

FROM mysql:5.6 

MAINTAINER Ryan K. 
USER root 

ADD mysqlAddUser.sh /tmp/ 
CMD ["/tmp/mysqlAddUser.sh"] 
ADD foo.sql /docker-entrypoint-initdb.d/foo.sql 

EXPOSE 3306 

## Starting mysqld and running Database Scripts 
CMD ["/usr/bin/mysqld_safe"] 

Bash скрипт:

#!/bin/bash 
DATABASE_PASSWORD=test 

/usr/bin/mysqld_safe & 
mysqladmin --login-path=local -uroot -p"$DATABASE_PASSWORD" 
mysqladmin password "$DATABASE_PASSWORD" 

mysql -uroot -p"$DATABASE_PASSWORD" -e "UPDATE mysql.user SET Password=PASSWORD('$DATABASE_PASSWORD') WHERE User='root'" 
mysql -uroot -p"$DATABASE_PASSWORD" -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1')" 
mysql -uroot -p"$DATABASE_PASSWORD" -e "DELETE FROM mysql.user WHERE User=''" 
mysql -uroot -p"$DATABASE_PASSWORD" -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%'" 
mysql -uroot -p"$DATABASE_PASSWORD" -e "FLUSH PRIVILEGES" 

DB_ROOT_PASS=TEST 
DB=portal 

mysql --login-path=local -uroot -p"$DB_ROOT_PASS" 
mysql -uroot -p"$DATABASE_PASWORD" -e "CREATE DATABASE portal"; 
mysql -uroot -p"$DATABASE_PASSWORD" -e "CREATE USER [email protected]'localhost' IDENTIFIED BY 'testing'"; 
mysql -uroot -p"$DATABASE_PASSWORD" -e "GRANT ALL PRIVILEGES ON portal.* TO [email protected]'localhost'"; 
mysql -uroot -p"$DATABASE_PASSWORD" -e "FLUSH PRIVILEGES"; 

mysql -uroot -p"$DATABASE_PASSWORD" $DB < /tmp/foo.sql 
+0

Розетка присутствует в контейнере. Если вы подключаетесь извне контейнера, вы должны предоставить хосту '-h', чтобы mysql мог найти вашу базу данных. –

+0

Я обращаюсь к нему изнутри контейнера. В основном запускайте контейнер в/bin/bash и пытайтесь получить доступ к db оттуда, используя mysql -u root -p – ryekayo

+0

Существует ли сокет на этом пути в контейнере? –

ответ

0

борется с той же проблемой с MySQL в Докер контейнере. Иногда я мог подключиться к клиенту mysql, но чаще всего это не так. Перешел на mariadb и имел ту же проблему.

Что, по-видимому, исправлено для меня, это добавить несколько команд сна в мои скрипты, которые создают, запускают и уничтожают контейнеры докеров. После таких команд, как «docker run» и «docker stop», я добавил «sleep 10», и это, похоже, помогает.

+0

Спасибо за эту информацию. Я действительно узнал, почему это произошло.Причина в том, что у меня была Ubuntu VM с выделенным только 1 ГБ виртуального барабана. Это наверняка вызовет проблемы, особенно если у меня будет один контейнер с запуском Tomcat. – ryekayo

Смежные вопросы