【问题标题】:Docker connect SQL Server container non-zero code: 1Docker 连接 SQL Server 容器非零代码:1
【发布时间】:2020-12-21 19:12:47
【问题描述】:

我正在尝试从docker-compose.yml 创建一个 SQL Server 容器,但是当我运行它时,它会直接停止并出现一些错误。注意:它运行在带有 docker Preview 的 Apple M1 芯片上

docker-compose.yml:

version: "3.7"
services:
  sql-server-db:
    container_name: sql-server-db
    image: mcr.microsoft.com/mssql/server:2019-latest
    ports: 
      - "1433:1433"
    environment: 
      SA_PASSWORD: "ApplePassDockerConnect"
      ACCEPT_EULA: "Y"

我遇到的错误:

sql-server-db | /opt/mssql/bin/sqlservr:0x400000000000以下的保留地址空间中地址0x40092b8000的映射无效。可能的原因:

sql-server-db | 1) 进程(自身或通过包装器)启动自己的运行环境,通过系统调用 setrlimit(2) 将堆栈大小限制设置为无限制;

sql-server-db | 2) 进程(本身,或通过包装器)调整自己的执行域,并通过系统调用特性(2)标记系统的遗留特性;

sql-server-db | 3) sysadmin 通过调整 sysctl 旋钮 vm.legacy_va_layout 故意将系统设置为在传统 VA 布局模式下运行。

sql-server-db |

sql-server-db 以代码 1 退出

【问题讨论】:

标签: sql-server docker apple-m1


【解决方案1】:

你不能真正在 M1 上使用 mcr.microsoft.com/mssql/server:2019-latest 容器,因为 MSSQL DB 不支持 ARM 架构。我发现的唯一方法是使用支持 ARM 并且可以在 M1 上运行的 Azure SQL 容器。

这是我的docker-compose.yml 配置示例:

version: "3.9"

services:
    # Database instance
    mssql:
      image: mcr.microsoft.com/azure-sql-edge:latest
      volumes:
        - events_mssql:/var/opt/mssql
      ports:
        - 1433:1433
      environment:
        - ACCEPT_EULA=1
        - MSSQL_SA_PASSWORD=Passw@rd

volumes:
    events_mssql:

您将能够使用用户名:sa、密码:Passw@rd 和数据库:master 连接到此数据库。如果您想要其他数据库名称 - 您可以创建一个新名称 using SQL: CREATE DATABASE TestDB

此数据库具有与 MSSQL DB 相同的 API,因此它适用于 pyodbc(M1 不支持)和 pymssql 库。

如果您在 M1 机器上本地使用它 - 请考虑使用 pymssql 库连接到 Azure SQL DB。这是我对pyodbchttps://stackoverflow.com/a/66919686/11515610问题的回答

【讨论】:

  • 我不认为你给出的 yml 例子格式正确。
  • @Eric 是的,你是对的。我没有在文件顶部复制 services: 键。现已修复
  • @keligijus 你是对的。我刚刚意识到这个脚本在 azure 容器中不起作用,它是为 mssql 容器设计的。我更新了答案并添加了有关如何在 Azure 容器中创建不同数据库的方法。
  • 顺便说一句,GitHub repo 正在讨论有关 ARM arch 对 mssql db 的支持
  • 我已在 MS 的反馈站点上提交了关于此主题的建议(SQL Server 对 Apple 的 M1 芯片的支持)。可以在这里找到:feedback.azure.com/d365community/idea/…
【解决方案2】:

Apple Chip M1 的 SQL 映像尚未容器化,但我们可以使用 azure-sql-edge。

我也尝试过 Apple M1 芯片的 MSSQL 映像,但同样的错误。

使用 azure-sql-edge,我可以在带有 M1 芯片的 Apple BigSur OS 上使用 MSSQL

你可以浏览这篇文章 https://medium.com/geekculture/docker-express-running-a-local-sql-server-on-your-m1-mac-8bbc22c49dc9

如果对您有帮助,请不要忘记将其标记为已回答。

【讨论】:

    【解决方案3】:

    所以...这可能与您的特定问题无关。我觉得它不会为您解决问题,因为您的问题听起来要低得多(正如您所怀疑的那样),但值得一试。

    我尝试复制粘贴您的确切 docker-compose 文件并在我的机器(Windows 桌面)上运行它,我也得到了exited with code 1

    似乎唯一能解决问题的是使用更复杂的密码。

    我连续测试了多次...我测试了您的密码,但它失败了。我测试了一个复杂的密码,它运行良好。

    所以我建议使用更复杂的密码。我测试的密码是6Xy3LkV7!9lo2^h

    【讨论】:

    • 这并没有解决问题,但感谢您的建议
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 2016-12-26
    • 2022-08-16
    • 1970-01-01
    • 2019-11-19
    • 2016-11-29
    • 2022-01-04
    相关资源
    最近更新 更多