Простой вопрос, я надеюсь. Я нигде не могу ничего найти.
Как создать базу данных в Microsoft SQL Server
Docker
контейнере?
Dockerfile
Я смотрю на следующее Dockerfile
:
FROM microsoft/mssql-server-windows-developer:latest
ENV sa_password ab873jouehxaAGR
WORKDIR /
COPY /db-scripts/create-db.sql .
# here be the existing run commnd in the image microsoft/mssql-server-windows-developer:latest
#CMD ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';", ".\\start -sa_password $env:sa_password -ACCEPT_EULA $env:ACCEPT_EULA -attach_dbs \\\"$env:attach_dbs\\\" -Verbose" ]
RUN (sqlcmd -S localhost -U SA -P ab873jouehxaAGR -i create-db.sql)
докер-compose.yml
Я собрал следующий файл для создания докера:
version: '3.4'
services:
sql.data:
image: ${DOCKER_REGISTRY}myfirst-mssql:latest
container_name: myfirst-mssql_container
build:
context: .
dockerfile: ./Dockerfile
environment:
SA_PASSWORD: ab873jouehxaAGR
ACCEPT_EULA: Y
Собираем все вместе
Я запускаю команду docker-compose up
против вышеуказанного. И если предположить, что файл create-db.sql
просто создаст базу данных, которая здесь не актуальна, чтобы сохранить минимальное количество вещей.
Ошибка
Ошибка, которую я получаю выше, заключается в том, что логин для SA недопустим при запуске сценария .sql
:
Step 7/7 : RUN (sqlcmd -S localhost -U SA -P ab873jouehxaAGR -i create-db.sql)
---> Running in 2ac5644d0bd9
Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : Login failed for user 'SA'..
Похоже, что это выполняется до того, как пароль был изменен на ab873jouehxaAGR, который обычно выглядит как команда из mssql-server-windows-developer:latest.json
для проверки изображения в vscode - \start -sa_password $env:sa_password -ACCEPT_EULA $env:ACCEPT_EULA -attach_dbs
на самом деле делает.
Окружающая среда
Я использую Docker Docker version 18.06.1-ce, build e68fc7a
в Windows 10.
Вложение или скрипт
Я не указываю присоединение базы данных с помощью переменной среды attach_dbs
, которую я вижу во многих примерах.
Я пытаюсь найти лучшую практику для управления контейнером sql с точки зрения сквозного тестирования, и многие статьи, кажется, не охватывают аспект аспекта данных - то есть Рабочий процесс разработки
Мне было бы интересно услышать в комментариях мысли об этих двух подходах в мире докеров.