Я пытаюсь создать серверный контейнер SQL, в котором после начальной настройки должны быть некоторые данные. Пока что я могу успешно создать засеянное изображение с томом, управляемым Docker, используя мой Dockerfile:
FROM mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04
EXPOSE 1433
RUN mkdir -p /opt/scripts
COPY seed.sql /opt/scripts
ENV MSSQL_SA_PASSWORD=Passw@rd1
ENV ACCEPT_EULA=Y
RUN ( /opt/mssql/bin/sqlservr --accept-eula & ) | grep -q "Service Broker manager has started" \
&& /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'Passw@rd1' -i /opt/scripts/seed.sql \
&& pkill sqlservr
VOLUME /var/opt/mssql
CMD /opt/mssql/bin/sqlservr
, который я затем запускаю в контейнере с помощью следующей команды:
docker run --name db-test -p 21143:1433 -v myVolume:/var/opt/mssql sql-db-test
, где sql-db-test
- это изображение, которое я создал с помощью вышеуказанного файла Dockerfile. С помощью docker volume ls
я могу проверить, что том успешно создан. Примечание. Я не пытаюсь смонтировать том по относительному пути, поскольку это невозможно при использовании команды запуска docker, как описано в этой проблеме на github .
Также настройка контейнера с этой настройкой с помощью docker -compose.yml работает нормально, и том создается:
version: "3.6"
services:
db-sqlserv:
build: sql-server
ports:
- "21143:1433"
volumes:
- compVolume:/var/opt/mssql
volumes:
compVolume:
Однако теперь я пытаюсь смонтировать том на машине :
version: "3.6"
services:
db-sqlserv:
build: sql-server
user: "0:0" # Run as root
ports:
- "21143:1433"
volumes:
- ./volume-sql-server:/var/opt/mssql
Но здесь я сталкиваюсь с проблемой: База данных пуста (только таблицы по умолчанию). Похоже, что вся база данных повторно инициализируется при запуске контейнера.
И в этот момент я полностью заблокирован. Я не нашел никакой полезной информации в документации docker -compose и уже исправил проблему с правами доступа к файлу, определив пользователя как root. Было бы замечательно, если бы кто-то мог указать, откуда может возникнуть проблема и как ее решить.
Мои настройки:
- Хост-машина: Ubuntu 18.04
- Docker версия: 18.09.9
- docker - составная версия: 1.23.2
Обновление: Тем временем я проверил свой docker составить скрипт на Windows машине. После публикации папки в настольном приложении, как описано в документах Windows. Поэтому я предполагаю, что я должен сделать то же самое для Linux. Я сделаю обновление, как только найду решение, но все же буду благодарен за любую помощь.