Staram się, aby mój proces deweloperski był łatwiejszy/łatwiejszy w obsłudze za pomocą funkcji dokowania (-kompilacja). Nie chcę używać żadnych woluminów (jeśli to możliwe). Dlaczego import.sh nie zostanie wykonany po uruchomieniu 'docker-compose up -d'?Jak wykonać skrypty po utworzeniu dokera?
mam następujące pliki:
docker-compose.yml
mysql
---- import.sh
---- db.sql
---- Dockerfile
w doker-compose.yml znajduje się:
version: '2'
services:
database:
image: mysql
build:
context: ./mysql/
dockerfile: Dockerfile
container_name: mysqltest
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: 123456
w /mysql/Dockerfile znajduje się:
ADD import.sh /tmp/import.sh
ADD db.sql /tmp/db.sql
RUN /tmp/import.sh
w /mysql/db.sql znajduje się:
CREATE DATABASE test1;
CREATE DATABASE test2;
CREATE DATABASE test3;
Plik Dockerfile zostanie uruchomiony, gdy obraz będzie _built_. Kompilacja Docker skompiluje obraz przed uruchomieniem. Zatem Twój skrypt powinien działać _przed uruchomieniem 'docker-compose up -d', a nie _ po tym. – mkasberg
Wygląda na to, że chcesz tylko zrzutu bazy danych uruchomić _ po uruchomieniu demona mysql. W takim przypadku użyj '/ docker-entrypoint-initdb.d', Udokumentowano na [MySQL Dockerhub Page] (https://hub.docker.com/_/mysql/), a także wyjaśniono tutaj: http: // stackoverflow .pl/questions/36781984/load-postgres-dump-after-docker-compose-up/36782751 # 36782751 (działa tak samo dla PostgreSQL i MySQL). – mkasberg
Tak, właśnie to chciałem osiągnąć i zadziałało to dla mnie, dziękuję. Ale co jeśli chcę uruchomić inne skrypty po procesie kompilacji/kiedy wszystkie kontenery są gotowe? – p0rter