Я создаю собственный образ Docker из существующего mcr.microsoft.com/mssql/server:2017-latest-ubuntu
, добавляя некоторые базы данных с помощью Flyway, а затем создаю резервные копии баз данных в контейнере.
Идея состоит в том, чтобы запустить контейнер Docker и импортировать все базы данных из файлов резервных копий, найденных в определенном каталоге.
Если моя точка входа в Docker просто запускается sqlservr
, а затем я exec
сценарии оболочки, которые восстанавливают БД извне, все работает (за исключением того, что иногда SQL Server работает, но на самом деле нет).
Согласно https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-configure-docker?view=sql-server-2017#customcontainer, я должен запустить свои сценарии оболочки до запуска sqlservr
, так как это процесс переднего плана, который определяет, запущен контейнер или нет.
Но это сложная ситуация: как я могу выполнять команды SQL в своих сценариях оболочки до запуска SQL Server?
Я знаю, что обычно можно сделать это с томом, но это тестовая база данных, и мне все равно, что произойдет с данными после завершения теста.
Вот мой сценарий точки входа Docker (у меня есть несколько пользовательских сценариев в /opt/mssql-tools/bin/
):
#!/bin/sh
if ! whoami &> /dev/null; then
if [ -w /etc/passwd ]; then
echo "${USER_NAME:-sqlservr}:x:$(id -u):0:${USER_NAME:-sqlservr} user:${HOME}:/sbin/nologin" >> /etc/passwd
fi
fi
/opt/mssql-tools/bin/restore-databases.sh & sqlservr
Спасибо за любые подсказки и предложения о том, каким должен быть "путь Docker".