성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] VT sequences to "CONOUT$" vs. STD_O...
[정성태] NetCoreDbg is a managed code debugg...
[정성태] Evaluating tail call elimination in...
[정성태] What’s new in System.Text.Json in ....
[정성태] What's new in .NET 9: Cryptography ...
[정성태] 아... 제시해 주신 "https://akrzemi1.wordp...
[정성태] 다시 질문을 정리할 필요가 있을 것 같습니다. 제가 본문에...
[이승준] 완전히 잘못 짚었습니다. 댓글 지우고 싶네요. 검색을 해보...
[정성태] 우선 답글 감사합니다. ^^ 그런데, 사실 저 예제는 (g...
[이승준] 수정이 안되어서... byteArray는 BYTE* 타입입니다...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>.NET Core - 로컬 개발 중에 docker 호스팅으로 바꾸는 경우 SQL 서버 접근 방법</h1> <p> 윈도우 환경에서 로컬에서 개발 시 "Docker Desktop"을 사용할 것입니다. 이와 함께 "Use the WSL 2 based engine" 옵션을 체크했다면 네트워크 환경이 WSL 1과는 다르므로,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > WSL 2의 네트워크 통신 방법 ; <a target='tab' href='https://www.sysnet.pe.kr/2/0/12347'>https://www.sysnet.pe.kr/2/0/12347</a> </pre> <br /> 몇 가지 곤란을 겪게 됩니다. 우선, docker에서 호스트 측의 서비스를 접근하기 위해 "localhost"를 사용할 수 없습니다. 이로 인해 .NET Core 응용 프로그램을 "docker support" 없이 개발할 때는 윈도우 통합 인증으로 테스트할 수 있었던 것을,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > { ...[생략]... "ConnectionStrings": { "BloggingDatabase": "<span style='color: blue; font-weight: bold'>Server=localhost</span>;Database=Blogging;<span style='color: blue; font-weight: bold'>Trusted_Connection=True</span>;" } } </pre> <br /> "docker support"로 옮기는 순간부터 "localhost"로는 접속할 수 없어 이런 오류가 발생합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 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] </pre> <br /> <a target='tab' href='https://www.sysnet.pe.kr/2/0/12945'>localhost 접속이 안 되는 문제</a>를 해결하기 위해 단순히 Server 주소만 host.docker.internal로 바꾸면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > "BloggingDatabase": "Server=<span style='color: blue; font-weight: bold'>host.docker.internal</span>;Database=Blogging;Trusted_Connection=True;" </pre> <br /> 이번에는 다음과 같은 식의 오류가 발생합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 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] </pre> <br /> 이 오류를 바로 잡으려면 윈도우 통합 인증을 사용해서는 안 되고, SQL 서버의 계정 인증 방식으로 바꿔야 합니다. 즉, 다음과 같이 연결 문자열을 바꿔야 합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > "BloggingDatabase": "Server=host.docker.internal;Database=Blogging;<span style='color: blue; font-weight: bold'>User Id=testusr; Password=...[생략]...</span>;" </pre> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
3662
(왼쪽의 숫자를 입력해야 합니다.)