Docker Compose与SQL Server容器一起运行

时间:2020-03-18 09:04:03

标签: sql-server docker docker-compose

我想在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却不能工作?

1 个答案:

答案 0 :(得分:0)

好吧..我解决了。 Microsoft定义的sql server SA密码要求是该密码包含以下四个类别中的三个类别的字符:

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

虽然我的原始密码符合这些要求,但实际上这还不够。当我使用以下密码SecretP@55w0rd而不是原始密码时,docker run命令可保持服务器正常运行。感谢Microsoft使用未记录的密码复杂性功能!

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