Я пытаюсь обновить некоторые док-контейнеры агента сборки 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 не может выполнить аутентификацию пользователь при установке шоколадной ведьмы (через шеф-повара)
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