Ich bin sicher, dass dies ein dupliziertes Thema ist, aber ich kann es einfach nicht erledigen: Ich möchte meine Datenbank-Dump in MySQL-Container zur Laufzeit wiederherstellen, ohne die Docker zu ändern -compose.yml Datei.Wiederherstellen von MySQL-Dump von Host auf Docker-Container
Dockerfile
FROM php:5.4.45-apache
RUN apt-get update
RUN docker-php-ext-install mysql mysqli
Docker-compose.yml
version: '2'
services:
php_service:
container_name: my_php
# Use Dockerfile in this dir to build the image
build: .
# Stop containers always after exiting.
restart: always
ports:
# 'localhost' does not works from the host, but the IP of docker itself
# (192.168.99.100 for example - shown on the top of the console)
- "80:80"
- "443:443"
environment:
# Pass variables
- API_TOKEN=xxxx
volumes:
# The current directory will be mounted to '/var/www/html'
# WORKS ONLY IN USER'S DIR ON WINDOWS (~/Downloads for example)
- .:/var/www/html
# See https://hub.docker.com/_/mysql/ for additional information.
# To open up console, run `docker exec -it my_mysql bash`.
# To restore a dump `docker exec -i my_mysql /usr/bin/mysql -u root
# --password=test_pass DATABASE < DUMP.sql` should work, but it never did.
mysql_service:
container_name: my_mysql
# Use an existing image
image: mysql:5.6
restart: always
ports:
# Let it accessible for other apps (mysql on host, IDE, etc.)
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: 'test_pass' # TODO: Change this
MYSQL_USER: 'test'
MYSQL_PASS: 'pass'
volumes:
# Named volumes (my-datavolume) has to be listed in the "volumes"
# section - I don't know how it works or what is it doing at all...
# (-_-')
- my-datavolume:/var/lib/mysql
volumes:
my-datavolume:
Schritte zum Reproduzieren:
- starten Docker Toolbox auf Windows 7 Host
docker-compose up
- Öffnen Sie ein neues Docker Toolbox Terminal
docker exec my_msql /usr/bin/mysql -u root --password=test_pass -e 'CREATE DATABASE testdb;'
docker exec -i my_mysql /usr/bin/mysql -u root --password=test_pass testdb < dump_on_host.sql
docker exec -it my_mysql /usr/bin/mysql -u root --password=test_pass testdb
mysql> SHOW TABLES;
Die Datenbank ist leer. Es scheint, dass es nichts tut, weil das Terminal zu schnell reagiert. Ich habe den Dump ausprobiert, indem ich MySQL auf meinem Host installiert habe, es kann wiederhergestellt werden.
Haben Sie die richtige Ausgabe zu erhalten für so etwas wie 'Docker exec -i my_mysql wc
Thilo
Danke für den Vorschlag - es sagt, die Eingabe ist leer ('0 0 0'). – bimlas
Angenommen, die Datei ist wirklich da, vielleicht hat die Pipe nicht funktioniert? Versuchen Sie 'cat dump_on_host.sql | Docker Exec ...' – Thilo