我希望这个简单的问题。我什么都找不到。
如何在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世界中这两种方法的评论。
答案 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'