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
相关产品推荐
相关产品推荐

