Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

.NET Core - 로컬 개발 중에 docker 호스팅으로 바꾸는 경우 SQL 서버 접근 방법

윈도우 환경에서 로컬에서 개발 시 "Docker Desktop"을 사용할 것입니다. 이와 함께 "Use the WSL 2 based engine" 옵션을 체크했다면 네트워크 환경이 WSL 1과는 다르므로,

WSL 2의 네트워크 통신 방법
; https://www.sysnet.pe.kr/2/0/12347

몇 가지 곤란을 겪게 됩니다. 우선, docker에서 호스트 측의 서비스를 접근하기 위해 "localhost"를 사용할 수 없습니다. 이로 인해 .NET Core 응용 프로그램을 "docker support" 없이 개발할 때는 윈도우 통합 인증으로 테스트할 수 있었던 것을,

{
  ...[생략]...

  "ConnectionStrings": {
    "BloggingDatabase": "Server=localhost;Database=Blogging;Trusted_Connection=True;"
  }
}

"docker support"로 옮기는 순간부터 "localhost"로는 접속할 수 없어 이런 오류가 발생합니다.

Microsoft.Data.SqlClient.SqlException
  HResult=0x80131904
  Message=A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 40 - Could not open a connection to SQL Server)
  Source=Core Microsoft SqlClient Data Provider
  StackTrace:
   at Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   ...[생략]...
   at Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade.EnsureCreated()
   at razor_50_sample.Startup.Configure(IApplicationBuilder app, IWebHostEnvironment env) in C:\temp\razor_50_sample\Startup.cs:line 53
   ...[생략]...
   at Microsoft.AspNetCore.Hosting.GenericWebHostService.<StartAsync>d__31.MoveNext()

  This exception was originally thrown at this call stack:
    Microsoft.Data.SqlClient.SqlInternalConnection.OnError(Microsoft.Data.SqlClient.SqlException, bool, System.Action<System.Action>)
    ...[생략]...
    Microsoft.Data.ProviderBase.DbConnectionPool.CreateObject(System.Data.Common.DbConnection, Microsoft.Data.Common.DbConnectionOptions, Microsoft.Data.ProviderBase.DbConnectionInternal)
    ...
    [Call Stack Truncated]

localhost 접속이 안 되는 문제를 해결하기 위해 단순히 Server 주소만 host.docker.internal로 바꾸면,

"BloggingDatabase": "Server=host.docker.internal;Database=Blogging;Trusted_Connection=True;"

이번에는 다음과 같은 식의 오류가 발생합니다.

Microsoft.Data.SqlClient.SqlException
  HResult=0x80131904
  Message=Cannot authenticate using Kerberos. Ensure Kerberos has been initialized on the client with 'kinit' and a Service Principal Name has been registered for the SQL Server to allow Kerberos authentication.
ErrorCode=InternalError, Exception=Interop+NetSecurityNative+GssApiException: GSSAPI operation failed with error - Unspecified GSS failure.  Minor code may provide more information (SPNEGO cannot find mechanisms to negotiate).
   at System.Net.Security.NegotiateStreamPal.GssInitSecurityContext(SafeGssContextHandle& context, SafeGssCredHandle credential, Boolean isNtlm, SafeGssNameHandle targetName, GssFlags inFlags, Byte[] buffer, Byte[]& outputBuffer, UInt32& outFlags, Int32& isNtlmUsed)
   ...[생략]...
   at Microsoft.Data.SqlClient.TdsParser.SNISSPIData(Byte[] receivedBuff, UInt32 receivedLength, Byte[]& sendBuff, UInt32& sendLength)
  Source=Core Microsoft SqlClient Data Provider
  StackTrace:
   at Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   ...[생략]...
   at Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade.EnsureCreated()
   at razor_50_sample.Startup.Configure(IApplicationBuilder app, IWebHostEnvironment env) in C:\temp\razor_50_sample\Startup.cs:line 53
   ...[생략]...
   at Microsoft.AspNetCore.Hosting.GenericWebHostService.<StartAsync>d__31.MoveNext()

  This exception was originally thrown at this call stack:
    Microsoft.Data.SqlClient.SqlInternalConnection.OnError(Microsoft.Data.SqlClient.SqlException, bool, System.Action<System.Action>)
    ...[생략]...
    Microsoft.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(Microsoft.Data.ProviderBase.TimeoutTimer, Microsoft.Data.SqlClient.SqlConnectionString, Microsoft.Data.SqlClient.SqlCredential, string, System.Security.SecureString, bool)
    ...
    [Call Stack Truncated]

이 오류를 바로 잡으려면 윈도우 통합 인증을 사용해서는 안 되고, SQL 서버의 계정 인증 방식으로 바꿔야 합니다. 즉, 다음과 같이 연결 문자열을 바꿔야 합니다.

"BloggingDatabase": "Server=host.docker.internal;Database=Blogging;User Id=testusr; Password=...[생략]...;"




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 1/28/2022]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 181  182  183  184  185  186  187  188  189  190  191  192  193  194  [195]  ...
NoWriterDateCnt.TitleFile(s)
68정성태10/31/200422013.NET Framework: 17. Win32_NTLogEvent를 c#에서 wmi 쿼리할 때..에러..
67정성태10/22/200419196COM 개체 관련: 12. Microsoft.XMLHTTP 개체에서 Microsoft.XMLDOM 개체를 전송할 때 charset 지정 문제?
66정성태10/16/200420392.NET Framework: 16. [닷넷 리모팅] 프록시가 죽은 것을 원격 개체가 알 수 있는 방법은?
65정성태10/16/200419385VS.NET IDE: 8. Windows 가상 메모리 사용 해제
64정성태10/3/200423105.NET Framework: 15. ASP.NET에서 .NET COM+ 개체 등록 시 "Local System"이어야 하는 이유.
63정성태10/3/200423199.NET Framework: 14. Response.Cookies.Clear는 기존 설정된 Cookie 헤더를 삭제하는 것이 아닙니다.
62정성태10/3/200422161기타: 7. DB 트랜잭션에서 Lock이 걸릴 수 있는 전형적인 예.
61정성태10/3/200421710.NET Framework: 13. Main 메서드에 붙은 STAThread 의미
60정성태10/3/200420418.NET Framework: 12. IDispatch::GetIDsOfNames 역변환 메서드 작성 힌트 ( DISPID 로 메서드 이름 알아내는 것 )
58정성태10/3/200423539.NET Framework: 11. HttpContext의 간략이해
56정성태10/3/200420002.NET Framework: 10. [.NET 리모팅] 원격개체를 호출한 클라이언트의 연결이 유효한지 판단하는 방법.
55정성태10/3/200420739COM 개체 관련: 11. 내가 생각해 보는 COM의 현재 위치
54정성태8/30/200426398VC++: 10. 내가 생각해 보는 MFC OCX와 ATL DLL에 선택 기준
53정성태11/20/200525734VC++: 9. CFtpFileFind/FtpFileFind가 일부 Unix FTP 서버에서 목록을 제대로 못 가져오는 문제
184정성태11/23/200519379    답변글 VC++: 9.1. FTP 관련 토픽파일 다운로드1
51정성태6/24/200424319VC++: 8. BSTR 메모리 할당 및 해제(MSDN Library 발췌) [1]
50정성태6/16/200417669기타: 6. 1차 데스크톱 컴퓨터 사양
49정성태6/16/200418161기타: 5. 53만 원대 Second PC 마련. ^^
48정성태3/2/200420048.NET Framework: 9. 윈도우즈 발전사를 모아 둔 사이트. [1]
47정성태11/14/200518548VS.NET IDE: 7. 한글 OS에서 Internet Explorer 6.0 with SP1의 UI 언어 바꾸는 방법
45정성태1/26/200417940기타: 4. MCAD 시험
44정성태1/26/200418743VS.NET IDE: 6. 터미널 서비스 포트 변경 ( 서버 및 클라이언트 )
46정성태1/26/200423788    답변글 VS.NET IDE: 6.1. Windows 2003 터미널 서비스 라이센스 서버 없이 접속
114정성태11/14/200515189    답변글 VS.NET IDE: 6.2. [터미널 서버 라이센스] : 활성화 시 오류
43정성태12/23/200318398기타: 3. XP/2003 개인 방화벽 설정파일 다운로드1
40정성태7/23/200321878COM 개체 관련: 10. IE BHO 개체를 개발할 때, 인터넷 익스플로러가 아닌 탐색기에서 활성화 되는 문제 해결 [1]
... 181  182  183  184  185  186  187  188  189  190  191  192  193  194  [195]  ...