2014-07-10 12 views
6

Im używa tego pliku dokowanego tutum-docker-mysql, aby uruchomić i uruchomić obraz dokowany z zainstalowanym w nim mysql, plik dokowanego tworzy użytkownika o nazwie root i bez hasła, czego potrzebuję aby dodać coś takiego do dockerfile:tworzenie domyślnej bazy danych w mysql przy użyciu pliku dokowanego

RUN mysql -uroot -p"" && mysql create database test; 

Więc kiedy zbudować obraz z pliku Döcker, baza danych powinna już tam być.

+0

Co dzieje się podczas próby to? – Behe

+0

Próbowałem kilku poleceń i otrzymałem błędy diff, próbowałem mysql -uroot "create database test", a błąd brzmi: ERROR 2002 (HY000): Nie można połączyć się z lokalnym serwerem MySQL poprzez gniazdo '/ var/run/mysqld /mysqld.sock '(2) – Mohammad

+0

Próbowałem również mysqld -uroot -p "" "create database test", a błąd jest następujący: 140710 10:12:28 [Ostrzeżenie] Używanie unikalnego prefiksu opcji key_buffer zamiast key_buffer_size jest przestarzałe i będzie zostać usunięte w przyszłej wersji. Zamiast tego użyj pełnej nazwy. – Mohammad

Odpowiedz

11

Udało mi się osiągnąć cel polegający na dodaniu bazy danych do obrazu tutum-docker-mysql, wykonując następujące czynności.

git clone https://github.com/tutumcloud/tutum-docker-mysql.git 
cd tutum-docker-mysql 
vi create_mysql_admin_user.sh 

Wewnątrz tego pliku .sh dodałem linię, tuż poniżej „mysql” -uroot dwóch linii, które już istnieją. Po prostu dodałem:

mysql -uroot -e "create database test;" 

Po tej zmianie do pliku .sh, po prostu zbudowałem obraz doka.

docker build -t tutum/mysql . 

Po zdjęciu doker został zbudowany, nie mogłem uruchomić go z czymś takim:

docker run -d -p 3307:3306 tutum/mysql 

Gdy pojemnik jest uruchomiony, trzeba znać hasło do używania i adres IP pojemnika . Aby otrzymać hasło, które po prostu zrobić

docker logs 2976a81f1a9b19787d9bde893c831b7e6586d7c8391ccd222ad29b02c282d896 

Ale oczywiście użyć identyfikator kontenera, który został zwrócony z polecenia „run doker” powyżej. Teraz, gdy masz już hasło, potrzebujesz adresu IP. Rozumiem to przez działanie.

docker inspect 2976a81f1a9b19787d9bde893c831b7e6586d7c8391ccd222ad29b02c282d896 

I patrząc na adres "Gateway". Za pomocą hasła i adresu IP mogłem wtedy wykonać polecenie mysql z ZEWNĄTRZ kontenera.

mysql -uadmin -pJcM5FCphMOp4 -h172.17.42.1 -P3307 

Gdzie adres ip i hasło są wartościami uzyskanymi z dwóch poprzednich poleceń dokowania. Po uruchomieniu tego polecenia mogę wydać polecenie "pokaż bazy danych" z następującymi wynikami.

mysql> show databases; 
+--------------------+ 
| Database   | 
+--------------------+ 
| information_schema | 
| mysql    | 
| performance_schema | 
| test    | 
+--------------------+ 
4 rows in set (0.00 sec) 

mysql> 

Walczyłem przez chwilę, próbując go modyfikując plik Docker. Myślę, że to może być możliwe, ale po pewnym czasie znalazłem powyższe rozwiązanie dużo szybciej i prościej.

3

Możesz przekazać parametr env ON_CREATE_DB przy starcie kontenera. Przykład z tutum README.md

docker run -d -p 3306:3306 -e ON_CREATE_DB="newdatabase" tutum/mysql

Powiązane problemy