2016-03-07 22 views
5

Docker üzerinde MySQL db kullanan bir uygulamaya ev sahipliği yapmaya çalışıyorum. Docker kompozisyonunu kullanıyorum. Benim yml dosyası şöyle görünür: Ben db şema oluşturur ve yml klasöründe tutulur bir dbcreation.sql varDocker ile bir mysql db nasıl oluşturabilirim?

version: '2' 
volumes: 
    data_sql:  
services: 
medical-mysql: 
    image: mysql 
    hostname: medical-mysql  
    volumes:  
    - data_sql:/dbcreation.sql 
    environment: 
     MYSQL_DATABASE: Medical 
     MYSQL_ROOT_PASSWORD: root 
     STARTUP_SQL: data_sql 
    ports: 
    - "3306:3306" 
    medical-main: 
    build: . 
    ports: 
    - "8080:8080"  
    depends_on: 
    - medical-mysql 

. Yml dosyasını çalıştırdığımda dosya çalışmıyormuş gibi görünüyor.

Neleri özledim?

+0

Peki, data_sql nedir ve dbcreation.sql'yi çağırdığınızda nedir? – Mattia

+0

data_sql, yalnızca oluşturma dosyasını barındırmak için oluşturduğum birimdir. Bunu yapmanın başka bir yolunu bulamadım ve bu da işe yaramıyor. –

+0

Dbcreation.sql dosyasına data_sql yüklüyorsunuz. Asla db'yi yaratmazsın. Sen/var/lib/mysql kopyalamak gerekir (ve kullanmak istiyorsanız dbcreation.sql değil böyle bir şey yürütmek gerekir: mysql -u kullanıcı db Mattia

cevap

10

1)) döküm dosyası dbcreation.sql

2 oluştur import.sh dosyası oluşturun:

#!/usr/bin/env bash 
mysql -u root -p$MYSQL_ROOT_PASSWORD < /tmp/dbcreation.sql 

3) oluşturma liman işçisi-compose.yaml

database: 
    image: mysql 
    container_name: database.dev 
    command: mysqld --user=root --verbose 
    volumes: 
    - ./dbcreation.sql:/tmp/dbcreation.sql 
    - ./import.sh:/tmp/import.sh 
    ports: 
    - "3306:3306" 
    environment: 
    MYSQL_DATABASE: "test" 
    MYSQL_USER: "test" 
    MYSQL_PASSWORD: "test" 
    MYSQL_ROOT_PASSWORD: "root" 
    MYSQL_ALLOW_EMPTY_PASSWORD: "yes" 

"- ./dbcreation.sql:/tmp/dbcrea tion.sql" - "- local_path: path_inside_container"

4) Run

docker-compose up 
docker exec database.dev bash /tmp/import.sh 
+0

Ben senin sorununun uygulanması bir sorun vardı beri ana kabım dolduğunda, db'ye ihtiyaç duyuyor. İstediğim yere ulaşmak için bana birçok ipucu verdi. Ben mysql konteyner oluşturma ayrı bir yml dosyasına bölünmüş. Aşağıdakilerle bir sh dosyası yaptım: docker-compose -f mysql.yml -d uyku 10; docker exec medikal-mysql bash /tmp/import.sh docker-up Çalışıyor. Mysql kabının uykudan daha hazır olduğundan emin olmanın daha iyi bir yolu var mı? –

+0

@IzharLotem konteynırla ilgili değildir, iç mekanda uygulama ile ilgilidir. Konteyner hazır, ancak kapsayıcının içinde uygulama yok. Uygulama düzeyinde bunu çözmeniz gerekiyor. MySQL veritabanının sağlığını "ana konteyner" inizde kontrol edebilir veya Dockerfile'da CMD'nin üzerine yazabilir ve ithalat yaptıktan sonra bayrağı bir yere koyabilirsiniz. Her neyse, bu docker işi değil. – ashatrov

+0

Bu eser, @ashatrov Teşekkürler – Devang

3

Basitçe sadece (yani bir klasörde .sql dosyasını (dbcreation.sql) koydu./Mysql_init) ve bunun gibi bir hacme olarak klasör eklemek: MySQL görüntü başlangıçta /docker-entrypoint-initdb.d tüm .sql, .sh ve .sql.gz dosyaları çalıştırır

volumes: 
    - /mysql_init:/docker-entrypoint-initdb.d 

.

İlgili konular