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

如何在Docker容器中配置SQL Server用户密码并避免明文存储

将SQL Server密码移至.env文件避免明文存储

下面是具体的改造步骤,把所有明文密码替换为环境变量,并通过.env文件统一管理:


1. 创建.env配置文件

在项目根目录新建.env文件,把所有敏感密码集中存放:

SA_PASSWORD=MyFancyPassword123
MYAPP_LOGIN_PASSWORD=MyFancyPassword123

提示:务必把.env添加到.gitignore中,防止敏感信息提交到代码仓库。

2. 修改Dockerfile

移除硬编码的密码,改为通过外部环境变量注入:

FROM mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04
ENV ACCEPT_EULA y
COPY ./init.sql . 
COPY ./entrypoint.sh . 
EXPOSE 1433
CMD /bin/bash ./entrypoint.sh

3. 修改entrypoint.sh

使用环境变量替代明文密码,并将应用登录密码传递给SQL脚本:

#!/bin/bash

# 用环境变量SA_PASSWORD替代明文,同时传递应用登录密码给SQL脚本
/opt/mssql-tools/bin/sqlcmd -S localhost -l 60 -U SA -P "$SA_PASSWORD" -i init.sql \
  -v MYAPP_LOGIN_PASSWORD="$MYAPP_LOGIN_PASSWORD" &

# 启动SQL Server服务
/opt/mssql/bin/sqlservr

4. 修改init.sql

使用sqlcmd变量创建登录账户,彻底消除明文密码:

CREATE DATABASE myapp;
go

USE myapp;
go

CREATE SCHEMA [enum]
GO

CREATE TABLE enum.attribute
(
    -- Primary Key
    ID_auto INT NOT NULL IDENTITY(1,1) PRIMARY KEY, 
    
    -- System Information
    acronym VARCHAR(1700),
    summary VARCHAR(1700),
    comment VARCHAR(1700),

    -- Constraints & Foreign Keys
    CONSTRAINT DUPE_FILTER_enum_attribute_acronym UNIQUE(acronym),

    -- Local history columns
    modified_by   VARCHAR(1700),
    modified_date DATETIME2,
    created_by    VARCHAR(1700),
    created_date  DATETIME2,
)
GO

-- 使用sqlcmd变量$(MYAPP_LOGIN_PASSWORD)替代明文密码
CREATE LOGIN myapp_login WITH PASSWORD='$(MYAPP_LOGIN_PASSWORD)', DEFAULT_DATABASE=myapp;
go

CREATE USER myapp FOR LOGIN myapp_login WITH DEFAULT_SCHEMA=dbo;
go

ALTER ROLE db_owner ADD MEMBER myapp;
go

5. 修改docker-compose.yml

配置容器自动读取.env文件并注入环境变量:

services:
    mssql:
        build: .
        container_name: my-mssql-container
        ports:
            - "1433:1433"
        volumes:
            - ./init.sql:/init.sql
            - ./entrypoint.sh:/entrypoint.sh
        # 加载.env文件中的环境变量
        env_file:
            - .env
        command: /bin/bash ./entrypoint.sh
        networks:
            - mssql-network

networks:
    mssql-network:
        driver: bridge

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 18:00:55