Как установить SQL Server Express от имени другого пользователя при установке через Chocolatey в Dockerfile

Я пытаюсь обновить некоторые док-контейнеры агента сборки teamcity. Теперь нам нужно установить SQL Server Express на агенты сборки. Мы используем Chocolatey для установки других программ в контейнер в файле докеров, поэтому я добавил RUN choco install sql-server-express -y в файл докеров.

Однако, когда teamcity пытается получить доступ к SQL Server, он получает сообщение об ошибке: `

System.Data.SqlClient.SqlException : при установлении соединения с SQL Server произошла ошибка, связанная с сетью или экземпляром. Сервер не найден или не был доступен. Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен на разрешение удаленных подключений.

Я открыл окно powershell в агенте сборки и попытался подключиться к серверу SQL, используя $sqlConnection.ConnectionString = "Data Source=$env:computername\SQLEXPRESS;Integrated Security=true;", однако там была еще одна ошибка:

Исключение, вызывающее «Открыть» с аргументом (-ами) «0»: «Произошла ошибка, связанная с сетью или конкретным экземпляром, при установлении соединения с SQL Server. Сервер не найден или недоступен. Убедитесь, что имя экземпляра указано правильно. и что SQL Server настроен на разрешение удаленных подключений.

Проверив журналы событий, я обнаружил следующие ошибки:

  • SQL Server не может создать поток FRunCommunicationsManager. Проверьте журнал ошибок SQL Server и журнал ошибок операционной системы для получения информации о возможных связанных проблемах.
  • Не удалось запустить сетевую библиотеку из-за внутренней ошибки в сетевой библиотеке. Чтобы определить причину, просмотрите ошибки, непосредственно предшествующие этой, в журнале ошибок.
  • Ошибка инициализации TDSSNIClient с ошибкой 0x5, код состояния 0x1. Причина: инициализация не удалась из-за ошибки инфраструктуры. Проверьте предыдущие ошибки. Доступ запрещен.
  • Ошибка инициализации TDSSNIClient с ошибкой 0x5, код состояния 0x51. Причина: невозможно настроить имя канала протокола Named Pipes, совместимого с MDAC, в реестре. Доступ запрещен.

Что похоже на проблему здесь: SQL Server 2014 SP2 не запускается в Windows Docker, и я полагаю, что это вызвано тем, что учетной записи containeradministrator (учетной записи пользователя по умолчанию в контейнере) не предоставлены правильные разрешения на редактирование раздела реестра, необходимого для открытия канала.

Я попытался загрузить контейнер без установки SQL, затем выполнить powershell и установить SQL с помощью шоколадного в качестве администратора контейнера, и когда это сделано, соединение с сервером работает. Я также запустил whoami прямо перед тем, как dockerfile запустил сценарий установки шоколада, и он показывает containeradministrator. Однако по какой-то причине при установке в dockerfile пользователь не получает правильных разрешений.

Я не уверен, как исправить эту проблему.

Еще одна похожая проблема: SQL Server не может выполнить аутентификацию пользователь при установке шоколадной ведьмы (через шеф-повара)


person Andrew Stiver    schedule 20.11.2019    source источник
comment
Почему вы не запускаете отдельный контейнер для SQL?   -  person Max    schedule 21.11.2019
comment
Как контейнеры Windows выполняют команды внутри контейнера? Это не как-то поверх WinRM не так ли?   -  person Bender the Greatest    schedule 28.02.2020
comment
В итоге я установил его вручную, передав установочный файл и используя следующую команду: RUN Start-Process -Wait -FilePath $env:sqlPath -ArgumentList /qs, /x:setup ; \ .\setup\setup.exe /q /ACTION=Install /INSTANCENAME=SQLEXPRESS /FEATURES=SQLEngine,Fulltext /UPDATEENABLED=0 /SQLSVCACCOUNT='NT AUTHORITY\System' /SQLSYSADMINACCOUNTS='BUILTIN\ADMINISTRATORS' /TCPENABLED=1 /NPENABLED=0 /IACCEPTSQLSERVERLICENSETERMS   -  person Andrew Stiver    schedule 06.03.2020