1

我正在尝试从 Windows SQL Server Express 映像构建一个 Docker 映像,该映像使用 SqlPackage 工具增强并预加载了一些数据以使用以下命令运行集成测试Dockerfile

FROM microsoft/mssql-server-windows-express

ARG DB_BACPAC=data.bacpac
ARG DB_NAME=db
ENV sa_password=VeryLongComplexP4ssW0rd
ENV accept_eula=Y

WORKDIR C:\\db
COPY $DB_BACPAC db.bacpac

SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]

RUN Invoke-WebRequest -Uri https://go.microsoft.com/fwlink/?linkid=2134206 -OutFile "sqlpackage-installer.msi"; \
    Start-Process msiexec.exe -Wait -ArgumentList '/I sqlpackage-installer.msi /quiet'; \
    Remove-Item sqlpackage-installer.msi -force

RUN stop-service MSSQL`$SQLEXPRESS
# Borrowed from the base Dockerfile for SQL Server express
CMD C:\\start -sa_password $env:SA_PASSWORD -ACCEPT_EULA Y

RUN & 'C:\\Program Files\\Microsoft SQL Server\\150\\DAC\\bin\\SqlPackage.exe' /Action:Import /SourceFile:"db.bacpac" /TargetServerName:localhost /TargetUser:sa /TargetPassword:$Env:sa_password /TargetDatabaseName:$Env:DB_NAME

不幸的是,在最终命令上尝试构建此 Docker 映像失败,RUN并显示以下消息:

*** Error importing database:Could not import package.
Unable to connect to target server 'localhost'. Please verify the connection information such as the server name, login credentials, and firewall rules for the target server.
Login failed for user 'sa'.

sa_password我尝试根据文档和 GitHub 问题更改 SA 密码环境变量 ( ) 的名称。其他用户警告说,如果密码本身不够复杂,登录可能会静默失败,因此选择了过度密码。

以前,我必须构建此映像的 Linux,它需要在同一层启动 SQL 服务器本身,然后再运行SqlPackage命令以设置密码,因此停止和启动命令(我也尝试过简单地使用Restart-Service无济于事) .

sa关于(重新)设置用户密码,我有什么遗漏吗?或者我应该以不同的方式在其中导入 BACPACDockerfile吗?

4

0 回答 0