![](/img/trans.png)
[英]Docker compose how to initialize SQL Server DB on Windows container?
[英]Docker compose vs run with SQL Server container
我想在 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
当以这种方式运行时,我可以执行到容器中并点击 SQL 提示符。 成功! 但是,我更喜欢使用一行运行服务器/容器,作为 Jenkins 构建中的一个步骤,我不希望它变得太复杂。
任何人都可以解释这里发生了什么和/或指出我正确的方向吗? 为什么docker-compose
对此有效而run
无效?
好的..我解决了。 微软定义的sql server SA密码要求是密码包含以下四类中的三类字符:
虽然我的原始密码满足这些要求,但事实证明这实际上还不够。 当我使用以下密码SecretP@55w0rd
而不是原始密码时, SecretP@55w0rd
docker run
命令使服务器保持docker run
。 感谢 Microsoft 使用未公开的密码复杂性功能!
出于某种原因,当您使用docker compose
运行服务器时,此密码要求并不那么严格。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.