【问题标题】:Connect to Remote MSSQL db from Linux Docker container从 Linux Docker 容器连接到远程 MSSQL 数据库
【发布时间】:2017-06-02 16:10:22
【问题描述】:

我有一个基于 microsoft/mssql-server-linux/ 映像的 linux docker 容器。容器此时没有任何内容,我正在尝试连接到托管在某处的 Windows 服务器上的远程 MSSQL 数据库。我不确定我该怎么做。

microsoft/mssql-server-linux/ 的文档没有提供太多细节。任何帮助,将不胜感激。

更新: 我现在有容器工作。但是,如果我尝试通过 bash 脚本创建和播种 db,容器会以代码 0 退出。

这里是 docker 文件和 docker-compose 文件

version: '2'
services:
  db:
    build: .
    ports:
      - "1433:1433"
    environment:
        ACCEPT_EULA: Y
        SA_PASSWORD: Password
        PATH: /opt/mssql-tools/bin:/opt/mssql/bin:$PATH
    container_name: db

FROM microsoft/mssql-server-linux:latest
EXPOSE 1433
RUN echo $PATH
RUN mkdir -p /usr/src/app
COPY ./db/* /usr/src/app/
WORKDIR /usr/src/app
RUN ls
RUN chmod +x /usr/src/app/dbInit.sh
RUN chmod +x /usr/src/app/dbSeed.sh
CMD /bin/bash ./entrypoint.sh

这是我的 entrypoint.sh:

/opt/mssql/bin/sqlservr & /usr/src/app/dbInit.sh

dbInit.sh 包含用于创建数据库、一些表并为其播种的 SQL 脚本。像这样的。

sqlcmd -S localhost -U SA -P password -d master -Q "CREATE DATABASE dbo"

docker-compose up --build 成功地创建了数据库、表和种子。但容器以代码 0 退出。似乎 SQL Server 自身已关闭。

【问题讨论】:

  • 那个图像是服务器,如果你已经在别处有服务器,你真的不应该使用它。
  • @James 谢谢。我想我应该改变我的问题。所以,我需要从 docker 容器访问远程 sql db。有什么想法或想法吗?我有一个 postgres 数据库,我可以使用 postgres 图像从 docker 容器连接到它。但不使用 MSSQL。
  • 嗨詹姆斯,我仍然不明白你想要达到什么目的。您是否将一个 mssql 引擎连接到另一个 mssql 引擎?您是否尝试使用链接服务器?或者您只是想从包含应用程序的 另一个 docker 容器连接到在 Docker 上运行的 mssql?
  • 我正在尝试从 docker 容器连接 Windows 服务器上的远程数据库。并使用此容器作为 api docker 容器的链接。

标签: docker docker-compose dockerfile sql-server-on-linux


【解决方案1】:

文档非常清晰。有关详细信息,请参阅 Connect and Query

1.首先你必须安装SQLCMD工具,因为它们不是自动安装的

  • 导入公共存储库 GPG 密钥。

卷曲https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -

  • 注册 Microsoft Ubuntu 存储库

卷曲https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list

  • 更新源列表并使用 unixODBC 开发包运行安装命令。

sudo apt-get 更新 sudo apt-get install mssql-tools unixodbc-dev

您可以在此处查看进一步的增强功能:Install tools on Ubuntu

现在你可以像下面这样查询

本地:

sqlcmd -S localhost -U SA -P ''

远程:

sqlcmd -S 192.555.5.555 -U SA -P ''

【讨论】:

  • 感谢您的回复。我试过这个,得到以下错误。 Sqlcmd:错误:Microsoft ODBC Driver 13 for SQL Server:登录超时已过期。 Sqlcmd:错误:Microsoft ODBC Driver 13 for SQL Server:TCP 提供程序:错误代码 0x2749。 Sqlcmd:错误:Microsoft ODBC Driver 13 for SQL Server:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。检查实例名称是否正确.....
  • 感谢您的帮助!!!。我现在已经开始工作了,但是容器关闭似乎存在问题。我已经更新了我的问题。再次感谢您。
  • 我不确定,能否请您添加更新部分并添加更多详细信息
  • 有一个选项可以将 sqlcmd 错误日志输出到文件中,尝试添加它并尝试在最后一行之后添加某种打印,我是移动设备,一旦我在笔记本电脑上将尝试检查更多内容跨度>
  • @Aj1:你能试试上面提到的步骤并更新问题吗
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-05
  • 1970-01-01
  • 2019-09-13
  • 1970-01-01
  • 1970-01-01
  • 2018-11-24
相关资源
最近更新 更多