【问题标题】:Can't connect to SQL Server database inside docker in travis无法连接到 travis 中 docker 内的 SQL Server 数据库
【发布时间】:2023-04-04 12:35:01
【问题描述】:

我无法连接到 travis 中 docker 容器内的 SQL Server 数据库。

在我的机器上一切正常,错误只发生在 travis 内部,不知道为什么。

Dockerfile:

from microsoft/mssql-server-linux:2017-latest

ENV ACCEPT_EULA=Y

ENV MSSQL_SA_PASSWORD=Passw0rd

COPY hermes.bak /var/opt/mssql/backup/hermes.bak

CMD ["/opt/mssql/bin/sqlservr"]

.travis.yml:

dist: trusty

services:
  - docker

before_install:
  - docker build -t hermes-db .
  - docker run -d -p 127.0.0.1:1430:1433 --name hermes-db hermes-db
  - docker exec hermes-db /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'Passw0rd' -Q "RESTORE DATABASE [lbc_refs] FROM DISK = N'/var/opt/mssql/backup/hermes.bak' WITH MOVE 'lbc_refs' TO '/var/opt/mssql/data/lbc_refs_data.mdf', MOVE 'lbc_refs_log' TO '/var/opt/mssql/data/lbc_refs_log.ldf'"

script:
  - docker ps | grep -q hermes-db

结束:

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 0x2AF9.
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online..

当我运行 netstat -tulpn 时:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:11211           0.0.0.0:*               LISTEN      -               
tcp        0      0 127.0.0.1:1430          0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -               
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      -               
tcp6       0      0 :::22                   :::*                    LISTEN      -               
udp        0      0 0.0.0.0:11211           0.0.0.0:*                           -               
udp        0      0 172.18.0.1:123          0.0.0.0:*                           -               
udp        0      0 172.17.0.5:123          0.0.0.0:*                           -               
udp        0      0 127.0.0.1:123           0.0.0.0:*                           -               
udp        0      0 0.0.0.0:123             0.0.0.0:*                           -               
udp6       0      0 :::123                  :::*                                -               

【问题讨论】:

  • 我想知道 - 用于 docker buildhermes-db 图像的文件是否可能在 .gitignore 中?
  • 不,gitignore 是空的,在 20 次构建中,2 次工作,18 次失败,出现此错误,当我重建工作的人时,他们失败了。

标签: sql-server docker travis-ci


【解决方案1】:

我在 Travis CI 上使用 SQL Server 的多租户应用程序中遇到了同样的问题。

这是最终版本:https://travis-ci.org/github/ron190/jsql-injection/builds/663658271

经过多次尝试和错误,我设法按照以下规则稳定了端口 1433 上的连接:

  • 使用图像2019-GDR1-ubuntu-16.04 而不是2017-latest
  • EXPOSE 1434 1433 在 Dockerfile 中,1434 用于 sqlcmd1433 用于 C3P0 上的休眠
  • 在测试与sqlcmd 的第一个连接之前添加sleep 10s
  • 使用符合 sql server 密码策略的密码

关于我在travis-ci.community上调试的一些细节。

【讨论】:

    猜你喜欢
    • 2018-07-28
    • 1970-01-01
    • 2019-11-19
    • 2020-01-14
    • 1970-01-01
    相关资源
    最近更新 更多