Dokumentation für die mysql Docker Bild sagt:Docker Bild, um das mysql Bild erstreckt, ist nicht die initdb des Ausführen von Skripts
Wenn ein Behälter zum ersten Mal gestartet wird, [...] wird mit Erweiterungen Ausführen von Dateien .sh und .sql, die in /docker-entrypoint-initdb.d gefunden werden. Sie können Ihre mysql-Dienste problemlos füllen, indem Sie einen SQL-Speicherauszug in diesem Verzeichnis bereitstellen und benutzerdefinierte Images mit bereitgestellten Daten bereitstellen.
Also zuerst habe ich dies in meinem docker-compose.yml
:
version: '2'
services:
db:
image: mysql:5.7
volumes:
- .:/docker-entrypoint-initdb.d:ro
Als ich docker-compose build
und docker-compose up
wurde der Behälter lief erstellt und die SQL-Dateien im aktuellen Verzeichnis ausgeführt wurden. Soweit alles gut.
Aber wenn ich will diese Container auf einem anderen Rechner implementieren (mit docker-machine
), Montag /docker-entrypoint-initdb.d
als ein Volumen wird nicht funktionieren, da die Maschine keinen Zugriff auf meine Maschine .
Verzeichnis hat.
So dann habe ich versucht, das mysql:5.7
Bild zu verlängern:
FROM mysql:5.7
COPY ./*.sql /docker-entrypoint-initdb.d/
Und tun dies in meinem docker-compose.yml
version: '2'
services:
db:
build:
context: .
dockerfile: Dockerfile
Allerdings, wenn ich dann docker-compose build
und docker-compose up
auf der zweiten Maschine laufen und versuchen, Führen Sie meine Anwendung, die *.sql
Dateien im aktuellen Verzeichnis werden nicht ausgeführt. Keine meiner Tabellen sind erstellt.
Warum funktioniert mein zweiter Ansatz nicht?
EDIT: Ah, warte. Ich habe die falsche Frage gestellt. Das Problem ist nicht, dass der zweite Ansatz nicht funktioniert, sondern dass der zweite Ansatz nicht funktioniert, wenn er auf dem lokalen Docker-Rechner läuft, der in Virtualbox läuft. Der zweite Ansatz funktioniert tatsächlich, wenn ich ihn auf meiner Host-Maschine verwende (d. H. Keine Docker-Maschine).
Können Sie die Protokolle veröffentlichen, wenn der Container zum ersten Mal ausgeführt wird?Was du hast, sieht gut aus, es ist wahrscheinlich etwas Einfaches. –
Ah, warte. Ich habe die falsche Frage gestellt. Das Problem ist nicht, dass der zweite Ansatz nicht funktioniert, sondern dass der zweite Ansatz nicht funktioniert, wenn er auf dem lokalen "Docker-Rechner" läuft, der in Virtualbox läuft. Der zweite Ansatz funktioniert tatsächlich, wenn ich ihn auf meiner Host-Maschine verwende (d. H. Keine "docker-machine" benutze). –
Ok, können Sie die Frage aktualisieren, und es wäre immer noch gut, die Logs zu sehen, um zu sehen, was vor sich geht. Es führt die .sql-Skripte nur beim ersten Start des Containers aus. Wenn Sie also Skripts nach dem ersten Start hinzugefügt haben, werden sie nicht ausgeführt. –