我想在Docker容器中运行SQL Server。根据我搜索过的内容,这应该有效:
docker run --name sqlserver -p 1433:1433 -e ACCEPT_EULA=Y -e SA_PASSWORD=strong@Password123 -d --rm microsoft/mssql-server-linux:2017-latest tail -f /dev/null
以这种方式运行时,docker旋转了一个容器,一切看上去都不错,但事实并非如此!当我尝试连接到它时,出现错误。通过bash连接:
sudo docker exec -it sqlserver "bash"
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "strong@Password123"
出现以下错误:
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login timeout expired.
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : TCP Provider: Error code 0x2749.
我很确定这是因为数据库服务器实际上没有运行。
我的第二项测试涉及使用docker-compose来启动服务器。撰写文件的内容:
version: "3.2"
services:
sqlserver:
container_name: sqlserver
image: microsoft/mssql-server-linux:2017-latest
ports:
- "1433:1433"
environment:
SA_PASSWORD: "strong@Password123"
ACCEPT_EULA: "Y"
然后:
docker-compose up -d
以这种方式运行时,我可以执行到容器OK中并单击SQL提示符。成功!但是,我更喜欢使用一行来运行服务器/容器,这是Jenkins构建中的一步,我不希望它变得太复杂。
有人可以解释这里发生的事情和/或为我指明正确的方向吗?为什么docker-compose
不能工作,而run
却不能工作?
答案 0 :(得分:0)
好吧..我解决了。 Microsoft定义的sql server SA密码要求是该密码包含以下四个类别中的三个类别的字符:
虽然我的原始密码符合这些要求,但实际上这还不够。当我使用以下密码SecretP@55w0rd
而不是原始密码时,docker run
命令可保持服务器正常运行。感谢Microsoft使用未记录的密码复杂性功能!
由于某些原因,当您使用docker compose
运行服务器时,此密码要求并不严格。