快速入门:使用 Docker 运行 SQL Server Linux 容器映像

适用于: SQL Server - Linux

在本快速入门教程中,你需要使用 Docker 请求和运行 SQL Server 2017 (14.x) Linux 容器映像 mssql-server-linux。 然后可以使用 sqlcmd 进行连接,创建第一个数据库并运行查询。

有关支持的平台的详细信息,请参阅 Linux 上的 SQL Server 2017 的发行说明

警告

当停止并删除容器时,容器中的 SQL Server 数据将被永久删除。 有关保留数据的详细信息,请在容器外创建并复制备份文件或使用容器数据暂留技术

本快速入门将创建 SQL Server 2017 (14.x) 容器。 如果希望为不同版本的 SQL Server 创建 Linux 容器,请参阅本文的 SQL Server 2019 (15.x)SQL Server 2022 (16.x) 版本。

在本快速入门教程中,你需要使用 Docker 请求和运行 SQL Server 2019 (15.x) Linux 容器映像 mssql-server-linux。 然后可以使用 sqlcmd 进行连接,创建第一个数据库并运行查询。

有关支持的平台的详细信息,请参阅 Linux 上的 SQL Server 2019 的发行说明

警告

当停止并删除容器时,容器中的 SQL Server 数据将被永久删除。 有关保留数据的详细信息,请在容器外创建并复制备份文件或使用容器数据暂留技术

本快速入门将创建 SQL Server 2019 (15.x) 容器。 如果希望为不同版本的 SQL Server 创建 Linux 容器,请参阅本文的 SQL Server 2017 (14.x)SQL Server 2022 (16.x) 版本。

在本快速入门教程中,你需要使用 Docker 请求和运行 SQL Server 2022 (16.x) Linux 容器映像 mssql-server-linux。 然后可以使用 sqlcmd 进行连接,创建第一个数据库并运行查询。

有关受支持的平台的详细信息,请参阅 Linux 上的 SQL Server 2022 的发行说明

警告

当停止并删除容器时,容器中的 SQL Server 数据将被永久删除。 有关保留数据的详细信息,请在容器外创建并复制备份文件或使用容器数据暂留技术

本快速入门将创建 SQL Server 2022 (16.x) 容器。 如果希望为不同版本的 SQL Server 创建 Linux 容器,请参阅本文的 SQL Server 2017 (14.x)SQL Server 2019 (15.x) 版本。

此映像包含在基于 Ubuntu 的 Linux 上运行的 SQL Server。 它可在 Linux 上与 Docker 引擎 1.8+ 配合使用。

从 SQL Server 2022 (16.x) CU 14 和 SQL Server 2019 (15.x) CU 28 起,容器映像包括新的 mssql-tools18 包。 以前的目录 /opt/mssql-tools/bin 正在逐步淘汰。Microsoft ODBC 18 工具的新目录为 /opt/mssql-tools18/bin,与最新的工具产品/服务保持一致。 有关更改和安全增强功能的详细信息,请参阅 ODBC Driver 18.0 for SQL Server 已发布

本文中的示例使用 docker 命令。 但大多数这些命令也可用于 Podman。 Podman 有一个类似于 Docker 引擎的命令行接口。 可以详细了解 Podman

重要

sqlcmd 目前不支持在创建容器时使用 MSSQL_PID 参数。 如果使用本快速入门中的 sqlcmd 说明,请使用 SQL Server 开发人员版本创建容器。 依照命令行接口 (CLI) 指令,使用所选许可证创建容器。 有关详细信息,请参阅部署并连接到 SQL Server Linux 容器

先决条件

  • 任何受支持的 Linux 发行版上的 Docker 引擎 1.8 及更高版本。 有关详细信息,请参阅 Install Docker(安装 Docker)。

请求并运行 SQL Server Linux 容器映像

在开始执行以下步骤之前,请确保已在本文顶部选择了首选的 shell(bash、PowerShell 或 cmd)。

对于本文中的 bash 命令,将使用 sudo。 如果不想使用 sudo 来运行 Docker,可以配置一个 docker 组,并将用户添加到该组。 有关详细信息,请参阅 Post-installation steps for Linux(适用于 Linux 的安装后步骤)。

从注册表拉取容器

从 Microsoft 容器注册表中请求 SQL Server 2017 (14.x) Linux 容器映像。

sudo docker pull mcr.microsoft.com/mssql/server:2017-latest
docker pull mcr.microsoft.com/mssql/server:2017-latest
docker pull mcr.microsoft.com/mssql/server:2017-latest

本快速入门将创建 SQL Server 2017 (14.x) 容器。 如果希望为不同版本的 SQL Server 创建 Linux 容器,请参阅本文的 SQL Server 2019 (15.x)SQL Server 2022 (16.x) 版本。

前一个命令请求最新的 SQL Server 2017 (14.x) Linux 容器映像。 如果想请求某个特定映像,需添加一个冒号和标记名称,如 mcr.microsoft.com/mssql/server:2017-GA-ubuntu。 若要查看所有可用的映像,请参阅 Microsoft 工件注册表

运行容器

要使用 Docker 运行 Linux 容器映像,可以从 Bash Shell 或提升的 PowerShell 命令提示符使用以下命令。

重要

SA_PASSWORD 环境变量已弃用。 请改用 MSSQL_SA_PASSWORD

sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" \
   -p 1433:1433 --name sql1 --hostname sql1 \
   -d \
   mcr.microsoft.com/mssql/server:2017-latest

如果使用 PowerShell Core,请将双引号替换为单引号。

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
   -p 1433:1433 --name sql1 --hostname sql1 `
   -d `
   mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
   -p 1433:1433 --name sql1 --hostname sql1 `
   -d `
   mcr.microsoft.com/mssql/server:2017-latest

密码应符合 SQL Server 默认密码策略,否则容器无法设置 SQL Server,会停止工作。 默认情况下,密码必须为至少八个字符且包含以下四种字符中的三种:大写字母、小写字母、十进制数字、符号。 可使用 docker logs 命令检查错误日志。

默认情况下,本快速入门会创建一个使用 SQL Server 开发人员版的容器。 在容器中运行生产版本的过程略有不同。 有关详细信息,请参阅运行生产容器映像

下表对前一个 docker run 示例中的参数进行了说明:

参数 说明
-e "ACCEPT_EULA=Y" ACCEPT_EULA 变量设置为任意值,以确认接受最终用户许可协议。 SQL Server 映像的必需设置。
-e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" 指定至少包含 8 个字符且符合密码策略的强密码。 SQL Server 映像的必需设置。
-e "MSSQL_COLLATION=<SQL_Server_collation>" 指定自定义 SQL Server 排序规则,而不使用默认值 SQL_Latin1_General_CP1_CI_AS
-p 1433:1433 将主机环境中的 TCP 端口(第一个值)映射到容器中的 TCP 端口(第二个值)。 在此示例中,SQL Server 侦听容器中的 TCP 1433,此容器端口随后会对主机上的 TCP 端口 1433 公开。
--name sql1 为容器指定一个自定义名称,而不是使用随机生成的名称。 如果运行多个容器,则无法重复使用相同的名称。
--hostname sql1 用于显式设置容器主机名。 如果未指定主机名,则主机名默认为容器 ID,这是随机生成的系统 GUID。
-d 在后台运行容器(守护程序)。
mcr.microsoft.com/mssql/server:2017-latest SQL Server Linux 容器映像。

查看容器列表

  1. 要查看 Docker 容器,请使用 docker ps 命令。

    sudo docker ps -a
    
    docker ps -a
    
    docker ps -a
    

    应会看到与如下示例类似的输出:

    CONTAINER ID   IMAGE                                        COMMAND                    CREATED         STATUS         PORTS                                       NAMES
    d4a1999ef83e   mcr.microsoft.com/mssql/server:2017-latest   "/opt/mssql/bin/perm..."   2 minutes ago   Up 2 minutes   0.0.0.0:1433->1433/tcp, :::1433->1433/tcp   sql1
    
  2. 如果 STATUS 列显示 Up 状态,则 SQL Server 正在容器中运行,并且在侦听 PORTS 列中指定的端口。 如果 SQL Server 容器的 STATUS 列显示 Exited,请参阅 SQL Server Docker 容器故障排除。 一旦 SQL Server 错误日志显示以下消息,就可连接此服务器:SQL Server is now ready for client connections. This is an informational message; no user action is required。 可以使用以下命令查看容器内的 SQL Server 错误日志:

    sudo docker exec -t sql1 cat /var/opt/mssql/log/errorlog | grep connection
    

    如前所述的 --hostname 参数将容器的内部名称更改为自定义值。 此值是以下 Transact-SQL 查询中返回的名称:

    SELECT @@SERVERNAME,
        SERVERPROPERTY('ComputerNamePhysicalNetBIOS'),
        SERVERPROPERTY('MachineName'),
        SERVERPROPERTY('ServerName');
    

    --hostname--name 设为相同的值是一种很好的方法,可以轻松地识别目标容器。

  3. 最后一步,在生产环境中更改 SA 密码,因为 MSSQL_SA_PASSWORDps -eax 输出中可见,并存储在同名的环境变量中。

请求并运行 SQL Server Linux 容器映像

在开始执行以下步骤之前,请确保已在本文顶部选择了首选的 shell(bash、PowerShell 或 cmd)。

对于本文中的 bash 命令,将使用 sudo。 如果不想使用 sudo 来运行 Docker,可以配置一个 docker 组,并将用户添加到该组。 有关详细信息,请参阅 Post-installation steps for Linux(适用于 Linux 的安装后步骤)。

从注册表拉取容器

从 Microsoft 容器注册表中请求 SQL Server 2019 (15.x) Linux 容器映像。

docker pull mcr.microsoft.com/mssql/server:2019-latest
docker pull mcr.microsoft.com/mssql/server:2019-latest
docker pull mcr.microsoft.com/mssql/server:2019-latest

本快速入门将创建 SQL Server 2019 (15.x) 容器。 如果希望为不同版本的 SQL Server 创建 Linux 容器,请参阅本文的 SQL Server 2017 (14.x)SQL Server 2022 (16.x) 版本。

前一个命令请求最新的 SQL Server 2019 (15.x) Linux 容器映像。 如果想请求某个特定映像,需添加一个冒号和标记名称,如 mcr.microsoft.com/mssql/server:2019-GA-ubuntu。 若要查看所有可用的映像,请参阅 Microsoft 工件注册表

运行容器

要使用 Docker 运行 Linux 容器映像,可以从 Bash Shell 或提升的 PowerShell 命令提示符使用以下命令。

重要

SA_PASSWORD 环境变量已弃用。 请改用 MSSQL_SA_PASSWORD

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" \
   -p 1433:1433 --name sql1 --hostname sql1 \
   -d \
   mcr.microsoft.com/mssql/server:2019-latest

如果使用 PowerShell Core,请将双引号替换为单引号。

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
   -p 1433:1433 --name sql1 --hostname sql1 `
   -d `
   mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
   -p 1433:1433 --name sql1 --hostname sql1 `
   -d `
   mcr.microsoft.com/mssql/server:2019-latest

密码应符合 SQL Server 默认密码策略,否则容器无法设置 SQL Server,会停止工作。 默认情况下,密码必须为至少八个字符且包含以下四种字符中的三种:大写字母、小写字母、十进制数字、符号。 可使用 docker logs 命令检查错误日志。

默认情况下,本快速入门会创建一个使用 SQL Server 开发人员版的容器。 在容器中运行生产版本的过程略有不同。 有关详细信息,请参阅运行生产容器映像

下表对前一个 docker run 示例中的参数进行了说明:

参数 说明
-e "ACCEPT_EULA=Y" ACCEPT_EULA 变量设置为任意值,以确认接受最终用户许可协议。 SQL Server 映像的必需设置。
-e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" 指定至少包含 8 个字符且符合密码策略的强密码。 SQL Server 映像的必需设置。
-e "MSSQL_COLLATION=<SQL_Server_collation>" 指定自定义 SQL Server 排序规则,而不使用默认值 SQL_Latin1_General_CP1_CI_AS
-p 1433:1433 将主机环境中的 TCP 端口(第一个值)映射到容器中的 TCP 端口(第二个值)。 在此示例中,SQL Server 侦听容器中的 TCP 1433,此容器端口随后会对主机上的 TCP 端口 1433 公开。
--name sql1 为容器指定一个自定义名称,而不是使用随机生成的名称。 如果运行多个容器,则无法重复使用相同的名称。
--hostname sql1 用于显式设置容器主机名。 如果未指定主机名,则主机名默认为容器 ID,这是随机生成的系统 GUID。
-d 在后台运行容器(守护程序)。
mcr.microsoft.com/mssql/server:2019-latest SQL Server Linux 容器映像。

查看容器列表

  1. 要查看 Docker 容器,请使用 docker ps 命令。

    docker ps -a
    
    docker ps -a
    
    docker ps -a
    

    应会看到与如下示例类似的输出:

    CONTAINER ID   IMAGE                                        COMMAND                    CREATED         STATUS         PORTS                                       NAMES
    d4a1999ef83e   mcr.microsoft.com/mssql/server:2019-latest   "/opt/mssql/bin/perm..."   2 minutes ago   Up 2 minutes   0.0.0.0:1433->1433/tcp, :::1433->1433/tcp   sql1
    
  2. 如果 STATUS 列显示 Up 状态,则 SQL Server 正在容器中运行,并且在侦听 PORTS 列中指定的端口。 如果 SQL Server 容器的 STATUS 列显示 Exited,请参阅 SQL Server Docker 容器故障排除。 一旦 SQL Server 错误日志显示以下消息,就可连接此服务器:SQL Server is now ready for client connections. This is an informational message; no user action is required。 可以使用以下命令查看容器内的 SQL Server 错误日志:

    docker exec -t sql1 cat /var/opt/mssql/log/errorlog | grep connection
    

    如前所述的 --hostname 参数将容器的内部名称更改为自定义值。 此值是以下 Transact-SQL 查询中返回的名称:

    SELECT @@SERVERNAME,
        SERVERPROPERTY('ComputerNamePhysicalNetBIOS'),
        SERVERPROPERTY('MachineName'),
        SERVERPROPERTY('ServerName');
    

    --hostname--name 设为相同的值是一种很好的方法,可以轻松地识别目标容器。

  3. 最后一步,在生产环境中更改 SA 密码,因为 MSSQL_SA_PASSWORDps -eax 输出中可见,并存储在同名的环境变量中。

请求并运行 SQL Server Linux 容器映像

在开始执行以下步骤之前,请确保已在本文顶部选择了首选的 shell(bash、PowerShell 或 cmd)。

对于本文中的 bash 命令,将使用 sudo。 如果不想使用 sudo 来运行 Docker,可以配置一个 docker 组,并将用户添加到该组。 有关详细信息,请参阅 Post-installation steps for Linux(适用于 Linux 的安装后步骤)。

从注册表拉取容器

从 Microsoft 容器注册表中请求 SQL Server 2022 (16.x) Linux 容器映像。

docker pull mcr.microsoft.com/mssql/server:2022-latest
docker pull mcr.microsoft.com/mssql/server:2022-latest
docker pull mcr.microsoft.com/mssql/server:2022-latest

本快速入门将创建 SQL Server 2022 (16.x) 容器。 如果希望为不同版本的 SQL Server 创建 Linux 容器,请参阅本文的 SQL Server 2017 (14.x)SQL Server 2019 (15.x) 版本。

前一个命令请求最新的 SQL Server 2022 (16.x) Linux 容器映像。 如果想请求某个特定映像,需添加一个冒号和标记名称,如 mcr.microsoft.com/mssql/server:2022-GA-ubuntu。 若要查看所有可用的映像,请参阅 Microsoft 工件注册表

运行容器

要使用 Docker 运行 Linux 容器映像,可以从 Bash Shell 或提升的 PowerShell 命令提示符使用以下命令。

重要

SA_PASSWORD 环境变量已弃用。 请改用 MSSQL_SA_PASSWORD

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" \
   -p 1433:1433 --name sql1 --hostname sql1 \
   -d \
   mcr.microsoft.com/mssql/server:2022-latest

如果使用 PowerShell Core,请将双引号替换为单引号。

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
   -p 1433:1433 --name sql1 --hostname sql1 `
   -d `
   mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
   -p 1433:1433 --name sql1 --hostname sql1 `
   -d `
   mcr.microsoft.com/mssql/server:2022-latest

密码应符合 SQL Server 默认密码策略,否则容器无法设置 SQL Server,会停止工作。 默认情况下,密码必须为至少八个字符且包含以下四种字符中的三种:大写字母、小写字母、十进制数字、符号。 可使用 docker logs 命令检查错误日志。

默认情况下,本快速入门会创建一个使用 SQL Server 开发人员版的容器。 在容器中运行生产版本的过程略有不同。 有关详细信息,请参阅运行生产容器映像

下表对前一个 docker run 示例中的参数进行了说明:

参数 说明
-e "ACCEPT_EULA=Y" ACCEPT_EULA 变量设置为任意值,以确认接受最终用户许可协议。 SQL Server 映像的必需设置。
-e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" 指定至少包含 8 个字符且符合密码策略的强密码。 SQL Server 映像的必需设置。
-e "MSSQL_COLLATION=<SQL_Server_collation>" 指定自定义 SQL Server 排序规则,而不使用默认值 SQL_Latin1_General_CP1_CI_AS
-p 1433:1433 将主机环境中的 TCP 端口(第一个值)映射到容器中的 TCP 端口(第二个值)。 在此示例中,SQL Server 侦听容器中的 TCP 1433,此容器端口随后会对主机上的 TCP 端口 1433 公开。
--name sql1 为容器指定一个自定义名称,而不是使用随机生成的名称。 如果运行多个容器,则无法重复使用相同的名称。
--hostname sql1 用于显式设置容器主机名。 如果未指定主机名,则主机名默认为容器 ID,这是随机生成的系统 GUID。
-d 在后台运行容器(守护程序)。
mcr.microsoft.com/mssql/server:2022-latest SQL Server Linux 容器映像。

更改系统管理员密码

SA 帐户是安装过程中在 SQL Server 实例上创建的系统管理员。 创建 SQL Server 容器后,可以通过在容器中运行 echo $MSSQL_SA_PASSWORD 来发现指定的 MSSQL_SA_PASSWORD 环境变量。 为了安全起见,应在生产环境中更改 SA 密码。

  1. 选择 SA 用户要使用的强密码。

  2. 使用 docker exec 运行sqlcmd,以使用 Transact-SQL 更改密码。 以下示例将从用户输入中读取旧密码和新密码。

    docker exec -it sql1 /opt/mssql-tools18/bin/sqlcmd \
    -S localhost -U SA \
     -P "$(read -sp "Enter current SA password: "; echo "${REPLY}")" \
     -Q "ALTER LOGIN SA WITH PASSWORD=\"$(read -sp "Enter new SA password: "; echo "${REPLY}")\""
    
    docker exec -it sql1 /opt/mssql-tools18/bin/sqlcmd `
       -S localhost -U SA -P "<YourStrong@Passw0rd>" `
       -Q "ALTER LOGIN SA WITH PASSWORD='<YourNewStrong@Passw0rd>'"
    
    docker exec -it sql1 /opt/mssql-tools18/bin/sqlcmd `
       -S localhost -U SA -P "<YourStrong@Passw0rd>" `
       -Q "ALTER LOGIN SA WITH PASSWORD='<YourNewStrong@Passw0rd>'"
    

    默认情况下,sqlcmd 的最新版本是安全的。 有关连接加密的详细信息,请参阅 sqlcmd 实用工具(对于 Windows)和使用 sqlcmd 进行连接(对于 Linux 和 macOS)。 如果连接不成功,则可以将 -No 选项添加到 sqlcmd,以指定加密是可选的,而不是强制性的。

最佳做法是将 sa 帐户禁用

重要

稍后将需要这些凭证。 请务必记下在此处输入的用户 ID 和密码。

在安装后首次使用 sa 帐户连接到 SQL Server 实例时,请务必执行这些步骤,然后立即禁用 sa 登录,此操作为安全最佳做法。

  1. 创建新的登录帐户,并将其设为 sysadmin 服务器角色的成员。

  2. 使用创建的新登录帐户连接 SQL Server 实例。

  3. 按照安全最佳做法的建议,禁用 sa 帐户。

查看容器列表

  1. 要查看 Docker 容器,请使用 docker ps 命令。

    docker ps -a
    
    docker ps -a
    
    docker ps -a
    

    应会看到与如下示例类似的输出:

    CONTAINER ID   IMAGE                                        COMMAND                    CREATED         STATUS         PORTS                                       NAMES
    d4a1999ef83e   mcr.microsoft.com/mssql/server:2022-latest   "/opt/mssql/bin/perm..."   2 minutes ago   Up 2 minutes   0.0.0.0:1433->1433/tcp, :::1433->1433/tcp   sql1
    
  2. 如果 STATUS 列显示 Up 状态,则 SQL Server 正在容器中运行,并且在侦听 PORTS 列中指定的端口。 如果 SQL Server 容器的 STATUS 列显示 Exited,请参阅 SQL Server Docker 容器故障排除。 一旦 SQL Server 错误日志显示以下消息,就可连接此服务器:SQL Server is now ready for client connections. This is an informational message; no user action is required。 可以使用以下命令查看容器内的 SQL Server 错误日志:

    docker exec -t sql1 cat /var/opt/mssql/log/errorlog | grep connection
    

    如前所述的 --hostname 参数将容器的内部名称更改为自定义值。 此值是以下 Transact-SQL 查询中返回的名称:

    SELECT @@SERVERNAME,
        SERVERPROPERTY('ComputerNamePhysicalNetBIOS'),
        SERVERPROPERTY('MachineName'),
        SERVERPROPERTY('ServerName');
    

    --hostname--name 设为相同的值是一种很好的方法,可以轻松地识别目标容器。

连接到 SQL Server

下列步骤在容器内部使用 SQL Server 命令行工具 sqlcmd 实用程序 来连接 SQL Server

  1. 使用 docker exec -it 命令在运行的容器内部启动交互式 Bash Shell。 在下面的示例中,sql1 是在创建容器时由 --name 参数指定的名称。

    docker exec -it sql1 "bash"
    
    docker exec -it sql1 "bash"
    
    docker exec -it sql1 "bash"
    
  1. 在容器内部使用完整路径通过 sqlcmd 进行本地连接。

    /opt/mssql-tools/bin/sqlcmd -S localhost -U <userid> -P "<YourNewStrong@Passw0rd>"
    

    默认情况下,sqlcmd 的最新版本是安全的。 有关连接加密的详细信息,请参阅 sqlcmd 实用工具(对于 Windows)和使用 sqlcmd 进行连接(对于 Linux 和 macOS)。 如果连接不成功,则可以将 -No 选项添加到 sqlcmd,以指定加密是可选的,而不是强制性的。

    可以省略命令行上提示要输入的密码。 例如:

    /opt/mssql-tools/bin/sqlcmd -S localhost -U <userid>
    
  1. 在容器内部使用完整路径通过 sqlcmd 进行本地连接。

    /opt/mssql-tools18/bin/sqlcmd -S localhost -U <userid> -P "<YourNewStrong@Passw0rd>"
    

    默认情况下,sqlcmd 的最新版本是安全的。 有关连接加密的详细信息,请参阅 sqlcmd 实用工具(对于 Windows)和使用 sqlcmd 进行连接(对于 Linux 和 macOS)。 如果连接不成功,则可以将 -No 选项添加到 sqlcmd,以指定加密是可选的,而不是强制性的。

    可以省略命令行上提示要输入的密码。 例如:

    /opt/mssql-tools18/bin/sqlcmd -S localhost -U <userid>
    
  1. 在容器内部使用完整路径通过 sqlcmd 进行本地连接。

    /opt/mssql-tools18/bin/sqlcmd -S localhost -U <userid> -P "<YourNewStrong@Passw0rd>"
    

    默认情况下,sqlcmd 的最新版本是安全的。 有关连接加密的详细信息,请参阅 sqlcmd 实用工具(对于 Windows)和使用 sqlcmd 进行连接(对于 Linux 和 macOS)。 如果连接不成功,则可以将 -No 选项添加到 sqlcmd,以指定加密是可选的,而不是强制性的。

    可以省略命令行上提示要输入的密码。 例如:

    /opt/mssql-tools18/bin/sqlcmd -S localhost -U <userid>
    
  1. 如果成功,应会显示 sqlcmd 命令提示符:1>

创建和查询数据

以下部分将引导你使用 sqlcmd 和 Transact-SQL 完成新建数据库、添加数据并运行查询的整个过程。

新建数据库

以下步骤创建一个名为 TestDB 的新数据库。

  1. 在 sqlcmd 命令提示符中,粘贴以下 Transact-SQL 命令以创建测试数据库:

    CREATE DATABASE TestDB;
    
  2. 在下一行中,编写一个查询以返回服务器上所有数据库的名称:

    SELECT Name from sys.databases;
    
  3. 前两个命令没有立即运行。 在新行中键入 GO 以运行前面的命令:

    GO
    

插入数据

接下来创建一个新表 Inventory,然后插入两个新行。

  1. 在 sqlcmd 命令提示符中,将上下文切换到新的 TestDB 数据库:

    USE TestDB;
    
  2. 创建名为 Inventory 的新表:

    CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT);
    
  3. 将数据插入新表:

    INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154);
    
  4. 键入 GO 运行上述命令:

    GO
    

选择数据

现在,运行查询以从 Inventory 表返回数据。

  1. 通过 sqlcmd 命令提示符输入查询,以返回 Inventory 表中数量大于 152 的行:

    SELECT * FROM Inventory WHERE quantity > 152;
    
  2. 运行以下命令:

    GO
    

退出 sqlcmd 命令提示符

  1. 要结束 sqlcmd 会话,请键入 QUIT

    QUIT
    
  2. 要在容器中退出交互式命令提示,请键入 exit。 退出交互式 Bash Shell 后,容器将继续运行。

从容器外连接

还可以从支持 SQL 连接的任何 Linux、Windows 或 macOS 外部工具连接到 Docker 计算机上的 SQL Server 实例。 外部工具使用主机的 IP 地址。

以下步骤在容器外使用 sqlcmd 连接在容器中运行的 SQL Server。 这些步骤假定你已在容器外安装了 SQL Server 命令行工具。 使用其他工具时,同样的原则依然适用,但连接过程因工具而异。

  1. 使用 ifconfigip addr 查找容器主机的 IP 地址。

  2. 对于本示例,请在客户端计算机上安装 sqlcmd 工具。 有关详细信息,请参阅 sqlcmd 实用工具,或在 Linux 上安装 SQL Server 命令行工具 sqlcmd 和 bcp

  3. 运行 sqlcmd,指定 IP 地址和映射容器中的端口 1433 的端口。 本例中为主机上的相同端口 1433。 如果在主机上指定了不同的映射端口,则在此处使用它。 还需要在防火墙上打开相应的入站端口以允许连接。

    默认情况下,sqlcmd 的最新版本是安全的。 如果连接不成功,并且你使用的是版本 18 或更高版本,则可以将 -No 选项添加到 sqlcmd,以指定加密是可选的,而不是强制性的。

    sudo sqlcmd -S <ip_address>,1433 -U <userid> -P "<YourNewStrong@Passw0rd>"
    
    sqlcmd -S <ip_address>,1433 -U <userid> -P "<YourNewStrong@Passw0rd>"
    
    sqlcmd -S <ip_address>,1433 -U <userid> -P "<YourNewStrong@Passw0rd>"
    
  4. 运行 Transact-SQL 命令。 完成后,键入 QUIT

连接到 SQL Server 的其他常见工具包括:

删除容器

如果想删除本教程中使用的 SQL Server 容器,请运行以下命令:

docker stop sql1
docker rm sql1
docker stop sql1
docker rm sql1
docker stop sql1
docker rm sql1

Docker 演示

尝试对 Docker 使用 SQL Server Linux 容器映像后,你可能想知道 Docker 是如何用于改进开发和测试的。 下面的视频介绍如何在持续集成和部署方案中使用 Docker。

参与编辑 SQL 文档

你是否知道你可以自行编辑 SQL 内容? 你如果这样做,不仅可以帮助改进我们的文档,还可以获得页面贡献者的殊荣。

有关详细信息,请参阅如何参与 SQL Server 文档编辑