У меня есть требование, когда мне нужно подождать несколько команд, прежде чем я заполняю данные для базы данных:
У меня есть несколько сценариев миграции, которые создают схему в базе данных (эта команда запускается из моего приложения контейнер). После этого я хочу заполнить данные базой данных.
Когда я прочитал, сценарии docker-entrypoint-initdb
выполняются при инициализации контейнера. Если к нему подключить свой сценарий seed.sql
, данные будут заполнены перед сценариями переноса. (Скрипты Migrate фактически удаляют все таблицы и создают их с нуля). Поэтому заполненные данные теряются.
Как этого добиться? (Я не могу изменить сценарии переноса)
Вот мой docker -compose.yml файл
version: '3'
services:
app:
build: .
# mount the current directory (on the host) to /usr/src/app on the container, any changes in either would be reflected in both the host and the container
volumes:
- .:/usr/src/app
# expose application on localhost:36081
ports:
- "36081:36081"
# application restarts if stops for any reason - required for the container to restart when the application fails to start due to the database containers not being ready
restart: always
environment:
MIGRATE: Y
<some env variables here>
config-dev:
image: mysql/mysql-server:5.7
environment:
MYSQL_DATABASE: config_dev
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
volumes:
# to persist data
- config-dev-volume:/var/lib/mysql
restart: always
# to connect locally from SequelPro
ports:
- "1200:3306"
<other database containers>
Мой Dockerfile для контейнера app
имеет следующий ENTRYPOINT
# start the application
ENTRYPOINT /usr/src/app/docker-entrypoint.sh
Вот docker -входная точка. sh file
#!/bin/bash
if [ "$MIGRATE" = "Y" ];
then
<command to start migration scripts>
echo "------------starting application--------------"
<command to start application>
else
echo "------------starting application--------------"
<command to start application>
fi
Редактировать: Есть ли способ запустить сценарий в контейнере config-db из docker -entrypoint. sh файл в контейнере приложения?