You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker run命令与Docker image的区别及SQL Server连接问题排查

Docker Run 与自定义镜像启动SQL Server的差异及连接问题解决

首先明确:Docker Run是直接调用官方预配置镜像的完整启动流程,而自定义镜像如果修改了官方镜像的核心配置或启动逻辑,很容易破坏服务初始化步骤,导致连接失败。你的问题出在两个关键配置错误:

1. 错误设置HOSTNAME环境变量

官方SQL Server镜像的容器hostname由Docker在启动时自动分配,你在Dockerfile中用ENV HOSTNAME "sqlpreview"手动设置不会生效——Docker容器启动时会覆盖这个环境变量,同时官方镜像的SQL Server初始化逻辑依赖容器实际hostname完成证书绑定、实例识别等操作,手动设置会导致服务配置异常。

解决:删除Dockerfile中的ENV HOSTNAME "sqlpreview"行

2. 跳过了官方镜像的初始化流程

官方SQL Server镜像的默认启动逻辑并非直接运行/opt/mssql/bin/sqlservr,而是通过entrypoint脚本先完成权限检查、配置初始化(比如SA密码生效、端口监听配置)等前置操作。你直接指定CMD /opt/mssql/bin/sqlservr跳过了这些步骤,导致数据库未完成初始化,自然无法连接。

解决:删除Dockerfile中的CMD /opt/mssql/bin/sqlservr行,保留官方镜像的默认启动逻辑

修正后的Dockerfile

# Use the official SQL Server 2022 image from Microsoft
FROM mcr.microsoft.com/mssql/server:2022-preview-ubuntu-22.04

# Set environment variables
ENV MSSQL_SA_PASSWORD "<PWD>"
ENV ACCEPT_EULA "Y"
ENV MSSQL_PID "Evaluation"

# Expose the SQL Server port(官方镜像已默认配置,此行可省略)
EXPOSE 1433

启动命令(需保留端口映射)

构建镜像并启动容器时,必须加上端口映射参数,和你之前用官方镜像的方式一致:

docker build -t my-mssql-image .
docker run -d -p 1433:1433 --name my-mssql-container my-mssql-image

内容的提问来源于stack exchange,提问作者Coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 20:52:52