从Docker中的脚本创建SQL Server数据库

时间:2018-08-30 21:24:07

标签: sql-server docker docker-compose containers dockerfile

我希望这个简单的问题。我什么都找不到。

如何在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)

docker-compose.yml

我整理了以下docker compose文件:

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实际上是这样。

环境

我正在Windows 10上运行docker Docker version 18.06.1-ce, build e68fc7a

附加或脚本

我没有指定使用在许多示例中看​​到的环境变量attach_dbs附加数据库。

从端到端测试的角度来看,我正在尝试找到一种管理sql容器的最佳实践,很多文章似乎都没有涉及数据方面的内容-即Development Workflow

我很想听听有关Docker世界中这两种方法的评论。

1 个答案:

答案 0 :(得分:0)

使用以下命令可以解决您的问题

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'