【问题标题】:Create SQL Server database from a script in docker从 docker 中的脚本创建 SQL Server 数据库
【发布时间】:2018-08-30 21:24:06
【问题描述】:

我希望是个简单的问题。我在任何地方都找不到任何东西。

如何在 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 文件将简单地创建一个与此处无关的数据库以保持最小化。

错误

我上面得到的错误是运行.sql脚本时SA的登录无效:

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

我很想听听 cmets 对 Docker 世界中这两种方法的看法。

【问题讨论】:

  • 我一直在努力解决类似的问题 - 在设置过程中,您也应该设置其他环境变量,但它似乎对我来说忽略了它们。此外,值得注意的是,用于 SQL Server 的基本 Microsoft docker 容器没有启用全文搜索。 (编辑,我在 windows 上使用 docker 脚本的经验并不完全顺利,即使是简单的事情也很难,就像谈判英国退欧一样)

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


【解决方案1】:

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

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'

【讨论】:

  • 使用#Andrez 与他人交谈只允许发表评论,但不允许回答。哇?因为,答案的顺序可能会改变,您的答案并不总是遵循#Andrez 问题!我会自己改变你的答案。
猜你喜欢
  • 1970-01-01
  • 2013-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多