Создать базу данных SQL Server из скрипта в докере - PullRequest
0 голосов
/ 31 августа 2018

Простой вопрос, я надеюсь. Я нигде не могу ничего найти.

Как создать базу данных в 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 с точки зрения сквозного тестирования, и многие статьи, кажется, не охватывают аспект аспекта данных - то есть Рабочий процесс разработки

Мне было бы интересно услышать в комментариях мысли об этих двух подходах в мире докеров.

1 Ответ

0 голосов
/ 14 ноября 2018

с помощью следующих команд может решить вашу проблему

docker-compose up --build -d

version: '3.4'
services: 
  sql.data:
    image: ${DOCKER_REGISTRY}myfirst-mssql:latest
    container_name: myfirst-mssql_container
    environment:
      SA_PASSWORD: ab873jouehxaAGR
      ACCEPT_EULA: Y

и после этого:

docker exec myfirst-mssql_container sqlcmd 
  -d master 
  -S localhost
  -U "sa"
  -P "ab873jouehxaAGR"
  -Q 'select 1'
...