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

Docker Compose环境变量不生效,MS SQL SA登录失败求助

MS SQL容器SA登录失败,Docker Compose环境变量未生效问题

更新

问题根源锁定在Dockerfile的RUN命令上。移除该命令后,镜像构建正常完成,且Docker Compose中设置的环境变量能被正确读取(SA密码可正常用于连接)。目前不清楚为何RUN命令中的登录会失败,此前见过很多类似的代码示例。

我正在编写基础docker-compose.yml搭建开发环境,先配置MS SQL数据库服务器,docker-compose.yml内容如下:

version: '3.8'

services:
  mssql:
    build:
      context: .
      dockerfile: docker/mssql/Dockerfile
    ports:
      - '1434:1433'
    environment:
      ACCEPT_EULA: "Y"
      SA_PASSWORD: "YourStrong!Passw0rd"
    volumes:
      - mssql-data:/var/opt/mssql

Dockerfile位于指定子目录,内容如下:

FROM mcr.microsoft.com/mssql/server:2019-latest

COPY ./docker/mssql/TESTDB.bak /var/opt/mssql/backup/TESTDB.bak

RUN ( /opt/mssql/bin/sqlservr --accept-eula & ) | grep -q "Service Broker manager has started" && /opt/mssql-tools/bin/sqlcmd -S localhost,1433 -U SA -P "YourStrong!Passw0rd" -Q 'RESTORE DATABASE TESTDB FROM DISK = "/var/opt/mssql/backup/TESTDB.bak" WITH MOVE "TESTDB_Data" to "/var/opt/mssql/data/TESTDB.mdf", MOVE "TESTDB_Log" to "/var/opt/mssql/data/TESTDB_log.ldf"'

(我知道RUN命令里的密码是硬编码冗余的,之前尝试用环境变量但无效,才改成这样。)

执行docker-compose up -d时,一直报错:Login failed for user 'SA'

一开始以为是密码问题,浪费了很多时间,直到发现直接在Dockerfile里添加环境变量就能正常运行——只需在RUN命令上方加上:

ENV ACCEPT_EULA=Y
ENV SA_PASSWORD=YourStrong!Passw0rd

由此推断Docker Compose里设置的环境变量没被读取。我试过带引号、不带引号、用env_file等方式,都没用;也试过这种格式:

environment
  - ACCEPT_EULA=Y
  - SA_PASSWORD=YourStrong!Passw0rd

还尝试用MSSQL_SA_PASSWORD替代SA_PASSWORD,或者同时设置两者,但考虑到SA_PASSWORD本身是有效的,这应该不是问题所在。最后换了2017版本的镜像,还是无效。

肯定是忽略了某个简单细节。看到很多关于根目录.env文件的讨论,但我理解那是在Docker Compose里引用环境变量时容易出错的场景,而我并没有这么做。这个看似基础的问题快把我搞疯了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 22:06:27