【发布时间】: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