>

Windows 10 컴퓨터에 SQL Server 2016 Express, Windows 및 IIS 용도 커가 설치되어 있습니다.

SQL Server Express는 1455 포트에서 수신 대기하도록 구성되어 있습니다. Northwind 샘플 데이터베이스가 있습니다.

Windows 방화벽이 비활성화되었습니다.

Ipconfig  다음을 보여줍니다 :

Ethernet adapter vEthernet (DockerNAT) 2:
   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe80::70f1:3323:a7a8:b7a5%21
   IPv4 Address. . . . . . . . . . . : 10.0.75.1
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . :

Visual Studio 2017에서 매우 간단한 .net 코어 2 콘솔 앱을 만들었습니다 :

using System;
using System.Data.SqlClient;
using System.Net.Http;
namespace ConnectSqlServer
{
    class Program
    {
        static void TestHttp()
        {
            using (var client = new HttpClient())
            {
                var response = client.GetAsync("http://10.0.75.1").Result;
                var content = response.Content.ReadAsStringAsync().Result;
                Console.WriteLine(content);
            }
        }
        static void Main(string[] args)
        {
            TestHttp();
            var cn = new SqlConnection("Data Source=10.0.75.1\\SQLEXPRESS,1455;Initial Catalog=Northwind;User ID=docker;Password=SomeStrongPassword;");
            cn.Open();
        }
    }
}

Visual Studio에서 Windows를 실행할 때 앱이 성공적으로 실행됩니다. 그러나 Docker Support를 추가하고 실행하면 TestHttp 메소드가 정상적으로 작동하지만 SQL Server에 연결할 수 없으면 다음 예외가 발생합니다.

와이즈 비즈

이것은 내

System.Data.SqlClient.SqlException
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)

입니다 :

Dockerfile

이것은 내 FROM microsoft/dotnet:2.0-runtime ARG source WORKDIR /app COPY ${source:-obj/Docker/publish} . ENTRYPOINT ["dotnet", "ConnectSqlServer.dll"] 입니다 :

docker-compose.yml

도커 컨테이너에서 실행되는 .net core 2.0 앱에서 Windows 호스트에서 실행되는 로컬 SQL Server Express에 연결하려면 어떻게해야합니까?

수정 :

답변 : Windows 방화벽을 비활성화 할 때주의하십시오.

도메인 네트워크에서만 Windows 방화벽을 해제했습니다. Windows는 DockerNAT 어댑터를 공용 네트워크로 간주합니다. 따라서 Windows 방화벽이 SQL Server에 대한 연결을 차단하고있었습니다.

공용 네트워크에서 Windows 방화벽을 끄고 지금 연결할 수 있습니다.

version: '3' services: connectsqlserver: image: connectsqlserver build: context: ./ConnectSqlServer dockerfile: Dockerfile
  • 답변 # 1

    문제는 Windows 방화벽을 올바르게 비활성화하지 않았다는 것입니다.

    도메인 네트워크에서만 Windows 방화벽을 해제했습니다. Windows는 DockerNAT 어댑터를 공용 네트워크로 간주합니다. 따라서 Windows 방화벽이 SQL Server에 대한 연결을 차단하고있었습니다.

    공용 네트워크에서 Windows 방화벽을 끄고 지금 연결할 수 있습니다.

  • 답변 # 2

    네트워크 모드를 호스트로 사용하여 컨테이너를 시작할 수 있습니다. 이 경우 컨테이너는localhost를 DNS 이름으로 사용하여 호스트 컴퓨터에서 실행되는 응용 프로그램에 연결할 수 있습니다.

    version: '3'
    services:
      connectsqlserver:
        image: connectsqlserver
        build:
          context: ./ConnectSqlServer
          dockerfile: Dockerfile
        network_mode: "host"
    
    

관련 자료

  • 이전 html - JavaScript를 사용하여 파일 이름을 표시하는 사용자 정의 파일 업로드 버튼
  • 다음 javascript - DB에서 Map ()으로 객체 전환