【问题标题】:Initialize SQL Server database in docker container without sqlcmd在没有 sqlcmd 的情况下在 docker 容器中初始化 SQL Server 数据库
【发布时间】:2022-07-01 16:02:51
【问题描述】:

我正在使用具有 M1 CPU 的 MacBook Pro,因此我无法使用“正常”的 mssql docker 映像。我正在使用没有 sqlcmd 的 azure-sql-edge 来初始化数据库(创建架构、数据库、登录)。

我创建了一个 sql 脚本,我想在容器启动后运行它,但我找不到 sqlcmd 的任何替代方法。

还有其他方法吗?

【问题讨论】:

  • 没有sqlcmd?你试过docker run -it --rm mcr.microsoft.com/azure-sql-edge:latest ls -la /opt/mssql-tools/bin了吗?
  • 返回ls: cannot access '/opt/mssql-tools/bin': No such file or directorymssql-tools 文件夹在容器中不存在。
  • 我很抱歉,您完全正确 - 我没有在 ARM64 上进行测试。 Docker hub page 甚至说,sqlcmd 工具在 ARM64 版本的 SQL Edge 容器中不可用。bcp 工具也不存在,因为整个文件夹都丢失了。
  • 在 ARM64 上没有 bcp 和 sqlcmd 的情况下,我只能建议使用 nodejs、pwsh (PowerShell) 或 Python 脚本从主机或同一容器中的另一个容器对容器执行更改码头工人网络。请注意,尽管 SQL 容器“立即”启动,但其中的 mssql 服务可能需要几秒/几十秒才能启动。您的初始化脚本将需要重试等待,直到它可以成功连接,如 mssql-node-docker-demo-app 所示
  • 是的,最后我不得不去找一个node 脚​​本。

标签: sql-server docker sqlcmd azure-sql-edge


【解决方案1】:

我遇到了同样的问题,我使用了 Microsoft 注册表中的 mssql-tools docker 映像。

示例 docker-compose:

---
version: '3.8'

services:
  mssql:
    image: mcr.microsoft.com/azure-sql-edge:latest
    command: /opt/mssql/bin/sqlservr
    environment:
      ACCEPT_EULA: "Y"
      SA_PASSWORD: "SA_Passw0rd"
    stdin_open: true
    ports:
      - 1433:1433
    networks:
      - db_net
  sqlcmd:
    image: mcr.microsoft.com/mssql-tools:latest
    command: /opt/mssql_scripts/run-initialization.sh
    stdin_open: true
    volumes:
      - ./mssql_scripts:/opt/mssql_scripts
    networks:
      - db_net
networks:
  db_net:
    name: db_net

要使用这个 docker-compose,您需要有一个名为 run-initialization.sh 的 shell 脚本,并且在 mssql_scripts 文件夹中具有执行权限。

run-initialization.sh脚本等待数据库启动,然后执行sql命令:

/opt/mssql-tools/bin/sqlcmd -S mssql -U SA -P SA_Passw0rd -d master -Q "SELECT version()"

或者如果你想从test.sql文件执行:

/opt/mssql-tools/bin/sqlcmd -S mssql -U SA -P SA_Passw0rd -d master -i /opt/mssql_scripts/test.sql

【讨论】:

  • 这行不通,因为 sqlcmd 在 M1 ARM64 上不可用
  • @Wlada 在我的情况下它正在工作,只是模拟到linux/amd64 平台。你只需要安装Rosetta 2
猜你喜欢
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-10
  • 2013-04-08
  • 1970-01-01
  • 2014-08-22
  • 1970-01-01
相关资源
最近更新 更多