这是我的 docker-compose.yml
文件:
version: "3.9"
services:
api:
# configuration of API here
db:
image: mcr.microsoft.com/mssql/server
restart: always
container_name: Database
volumes:
- ./Data:/var/opt/mssql
environment:
- ACCEPT_EULA=Y
- SA_PASSWORD=lksU2o412f7tBj58t07B
- MSSQL_PID=Express
ports:
- 1433:1433
command: >
sh -c
"
tail -f /dev/null
"
如您所见,我使用的是 MS SQL Server 的官方 docker 映像,mcr.microsoft.com/mssql/server
。
我的笔记本电脑是 Ubuntu 20.04 LTS
。
我先运行 docker-compose up -d
,然后运行 docker exec -it db sh
以获得交互式 shell。
然后我写这个命令:
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'lksU2o412f7tBj58t07B'
我得到了这个回复:
<块引用>Sqlcmd:错误:Microsoft ODBC Driver 17 for SQL Server:登录超时已过期。
Sqlcmd:错误:Microsoft ODBC Driver 17 for SQL Server:TCP 提供程序:错误代码 0x2749。
Sqlcmd:错误:Microsoft ODBC Driver 17 for SQL Server:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。检查实例名称是否正确以及 SQL Server 是否配置为允许远程连接。有关详细信息,请参阅 SQL Server 联机丛书..
这是官方图片,我没有改变任何东西。
也在我的 api
容器中,我可以 ping db
或 Database
。但我无法 telnet 端口 1433
。
我的主机也可以telnet localhost 1433
,但我得到了这个响应:
正在尝试 127.0.0.1...
连接到本地主机。
转义字符是“^]”。
连接被外部主机关闭。
这是使用 Microsoft 容器的糟糕体验。容器不应该开箱即用吗?容器技术不就是为了解决这些愚蠢的问题吗?
我该怎么办?