繁体   English   中英

Docker 组合与使用 SQL Server 容器运行

[英]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密码要求是密码包含以下四类中的三类字符:

  • 拉丁大写字母(A 到 Z)
  • 拉丁小写字母(a 到 z)
  • 基数 10 位(0 到 9)
  • 非字母数字字符,例如:感叹号 (!)、美元符号 ($)、数字符号 (#) 或百分比 (%)。

虽然我的原始密码满足这些要求,但事实证明这实际上还不够。 当我使用以下密码SecretP@55w0rd而不是原始密码时, SecretP@55w0rd docker run命令使服务器保持docker run 感谢 Microsoft 使用未公开的密码复杂性功能!

出于某种原因,当您使用docker compose运行服务器时,此密码要求并不那么严格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM