2014-07-10 8 views
6

Im utilizzando questo file dock tutum-docker-mysql, per essere installato e in esecuzione con un'immagine docker con mysql installato in esso, il file docker crea un utente con il nome root e nessuna password, quello che mi serve è per aggiungere qualcosa di simile al dockerfile:creazione di un database predefinito in mysql utilizzando dockerfile

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

Così, quando ho costruire un'immagine dal file finestra mobile, il database dovrebbe essere già lì.

+0

Cosa succede quando si tenta questo? – Behe

+0

ho provato alcuni comandi e ho riscontrato errori di diff, ho provato mysql -uroot "create database test" e l'errore è: ERROR 2002 (HY000): impossibile connettersi al server MySQL locale tramite socket '/ var/run/mysqld /mysqld.sock '(2) – Mohammad

+0

Ha anche provato mysqld -uroot -p "" "crea test database", e l'errore è: 140710 10:12:28 [Avvertimento] L'uso del prefisso opzione unico key_buffer invece di key_buffer_size è deprecato e essere rimosso in una versione futura. Si prega di utilizzare il nome completo invece. – Mohammad

risposta

11

Sono stato in grado di raggiungere l'obiettivo di aggiungere un database all'immagine tutum-docker-mysql attenendo alla seguente procedura.

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

All'interno di tale file .sh ho aggiunto una linea, proprio sotto le due linee "mysql -uroot" che sono già lì. Ho semplicemente aggiunto:

mysql -uroot -e "create database test;" 

Dopo aver modificato il file .sh, ho semplicemente creato l'immagine della finestra mobile.

docker build -t tutum/mysql . 

Dopo che l'immagine finestra mobile è stato costruito, ho potuto correre con qualcosa di simile:

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

Una volta che il contenitore è in esecuzione, è necessario conoscere la password da utilizzare e l'indirizzo IP del contenitore . Per ottenere la password è sufficiente fare

docker logs 2976a81f1a9b19787d9bde893c831b7e6586d7c8391ccd222ad29b02c282d896 

Ma naturalmente utilizzare l'ID del contenitore, che è stato restituito dal comando "Esegui finestra mobile" di cui sopra. Ora che hai la password, hai bisogno dell'indirizzo ip. Lo capisco facendo.

docker inspect 2976a81f1a9b19787d9bde893c831b7e6586d7c8391ccd222ad29b02c282d896 

E guardando l'indirizzo "Gateway". Con la password e l'indirizzo ip sono stato in grado di fare questo comando mysql da OUTSIDE del container.

mysql -uadmin -pJcM5FCphMOp4 -h172.17.42.1 -P3307 

Dove l'indirizzo IP e la password sono i valori ottenuti dai precedenti due comandi di finestra mobile. Dopo che il comando è stato eseguito, posso quindi inviare un comando "mostra database" con i seguenti risultati.

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

mysql> 

Ho combattuto per un po 'provandolo modificando il Dockerfile. Penso che potrebbe essere possibile, ma dopo un po 'ho trovato la soluzione di cui sopra molto più veloce e semplice.

3

È possibile passare il parametro ON_CREATE_DB all'avvio del contenitore. Esempio da tutum README.md

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

Problemi correlati