Я запускаю контейнер Docker с идентификатором gMSA для подключения к SQL Server через проверку подлинности Windows. Я подтвердил, что идентификатор gMSA работает правильно в контейнере, однако я получаю сообщение об ошибке формата строки подключения SQL:
«Формат строки инициализации не соответствует спецификации, начиная с индекса 0».
Мой Dockerfile выглядит так:
FROM microsoft/dotnet:2.2-runtime-nanoserver-sac2016
COPY . .
ENTRYPOINT ["dotnet", "Daemon.dll"]
CMD ["EventConfig:MqHostName=10.23.2.1", "ConnectionStrings:TestDb1=Data Source=10.23.2.1;Initial Catalog=Events;Integrated Security=true", "ConnectionStrings:TestDb2=Data Source=10.23.2.1;Initial Catalog=Notifications;Integrated Security=true", "ConnectionStrings:TestDb3=Data Source=10.23.2.1;Initial Catalog=TESTDB;Integrated Security=true"]
Запуск docker inspect в контейнере выглядит так, как будто параметры CMD анализируются правильно, однако я все еще получаю сообщение об ошибке. Строки подключения работают без проблем за пределами Docker.
Я пытался окружить строки подключения обратной кавычкой `, одинарными кавычками, двойными кавычками и косой чертой. Я также пробовал передавать строки как переменные ENV, а не как параметры CMD. Я также попытался добавить директиву парсера, например
# escape=`
в начало моего Dockerfile. Любая помощь будет принята с благодарностью.





Для всех, у кого может быть похожая проблема, я определил, как избежать внутренних кавычек, используя символ \. Правильно отформатированные строки подключения Dockerfile выглядят следующим образом:
CMD ["EventConfig:MqHostName=10.23.2.1", "ConnectionStrings:TestDb1\"=Data Source=10.23.2.1;Initial Catalog=Events;Integrated Security=true\"", "ConnectionStrings:TestDb2=\"Data Source=10.23.2.1;Initial Catalog=Notifications;Integrated Security=true\"", "ConnectionStrings:TestDb3=\"Data Source=10.23.2.1;Initial Catalog=TESTDB;Integrated Security=true\""]