Запускать скрипт SQL после запуска SQL Server на докере - PullRequest
0 голосов
/ 26 июня 2018

У меня есть Dockerfile с кодом ниже

FROM microsoft/mssql-server-windows-express
COPY ./create-db.sql .
ENV ACCEPT_EULA=Y
ENV sa_password=##$wo0RD!
CMD sqlcmd -i create-db.sql

и я могу создать образ, но когда я запускаю контейнер с изображением, я не вижу созданную базу данных на SQL Server, потому что скрипт выполняется до запуска SQL Server.

Можно ли сделать так, чтобы скрипт запускался после запуска службы с SQL Server?

1 Ответ

0 голосов
/ 27 июня 2018

RUN используется для построения слоев в изображении. CMD - это команда, запускаемая при запуске экземпляра образа («контейнера»)

Кроме того, если ваш скрипт зависит от этих переменных среды, если это более старая версия Docker, он может завершиться ошибкой, поскольку эти переменные не определены так, как вы хотите, чтобы они были определены!

В старых версиях docker команда ENV Dockerfile использует пробелы вместо "="

Ваш Dockerfile, вероятно, должен быть:

FROM microsoft/mssql-server-windows-express
COPY ./create-db.sql .
ENV ACCEPT_EULA Y
ENV sa_password ##$wo0RD!
RUN sqlcmd -i create-db.sql 

Это создаст изображения, содержащие базу данных с вашим паролем внутри.

(Если файл SQL каким-либо образом использует переменные среды, это не имеет смысла, так как вы можете также обновить файл SQL, прежде чем скопировать его.) Если вы хотите иметь возможность переопределить пароль между сборкой докера и шаги запуска docker. Используя docker run --env sa_password=##$wo0RD! ..., вам нужно изменить последнюю строку на:

CMD sqlcmd -i create-db.sql && .\start -sa_password $env:sa_password \
-ACCEPT_EULA $env:ACCEPT_EULA -attach_dbs \"$env:attach_dbs\" -Verbose

Который является модифицированной версией строки CMD, которая унаследована от восходящего образа

...