sql-server - 외부 - sql server management studio 사용법




기본 포트에서 Docker를 통해 실행중인 다른 SQL Server 인스턴스로 라우팅 (2)

HTTP 서버와 같은 데이터베이스에는 "가상"액세스가 없습니다. 따라서 동일한 IP를 가리키는 추가 호스트 이름이 도움이되지 않습니다.

모든 인스턴스에 대해 포트 1433을 고집한다면 두 개의 다른 외부 IP를 사용하는 것을 제외하고는 아무 것도 볼 수 없습니다.

리눅스 박스에 있다면 iptables 마법을 시도해 볼 수는 있지만 우아한 것은 아니며 한 번에 하나의 인스턴스에만 액세스 할 수 있습니다. Windows는 iptables를 동등하게 (나는 결코 들어 보지 못했지만) 오직 한 번에 하나씩 만 탈출 할 수 있습니다.

내 충고 - 하나 이상의 포트를 사용하여 서버를 노출하십시오.

웹 사이트에 연결할 때 헤더를 사용하기 때문에 Traefik을 사용할 수 있습니다. 그러나 외부 적으로 사용할 수있는 여러 개의 다른 SQL Server 인스턴스를 도커를 통해 실행하려는 경우 (로컬 네트워크 외부의 도커 호스트 외부)

그래서 다른 사람이나 다른 사람이 액세스 할 수 있도록 다른 포트 나 외부 IP 주소를 부여하지 않고 동일한 고정 인스턴스에서 실행중인 다른 SQL Server 인스턴스에 연결할 수있는 것이 있습니까?

SQL 도구에서 sql01.docker.local,1433 AND sql02.docker.local,1433 .

추가 질문 시작

거기에는 응답이 없었기 때문에 아마도 sql.docker.local\instance1sql.docker.local\instance2 와 같은 다른 인스턴스를 가질 수있는 방법이 있습니다.하지만 가능하지 않을 수도 있습니다.

추가 질문 끝내기

이것은 내가 사용하려고했던 docker-compose 파일의 예입니다 (SQL 서버에 대한 쿼리가 호스트 헤더를 통해 전송하지 않는다는 것을 깨닫기 전에 - 또는 내가 잘못 생각한 것입니까?).

version: '2.1'
services:
  traefik:
    container_name: traefik
    image: stefanscherer/traefik-windows
    command: --docker.endpoint=tcp://172.28.80.1:2375 --logLevel=DEBUG
    ports:
      - "8080:8080"
      - "80:80"
      - "1433:1433"
    volumes:
      - ./runtest:C:/etc/traefik
      - C:/Users/mvukomanovic.admin/.docker:C:/etc/ssl
    networks:
      - default
    restart: unless-stopped
    labels:
      - "traefik.enable=false"

  whoami:
    image: stefanscherer/whoami
    labels:
      - "traefik.backend=whoami"
      - "traefik.frontend.entryPoints=http"
      - "traefik.port=8080"
      - "traefik.frontend.rule=Host:whoami.docker.local"
    networks:
      - default
    restart: unless-stopped


  sql01:
    image: microsoft/mssql-server-windows-developer
    environment:
      - ACCEPT_EULA=Y
    hostname: sql01
    domainname: sql01.local
    networks:
      - default
    restart: unless-stopped
    labels:
      - "traefik.frontend.rule=Host:sql01.docker.local,sql01,sql01.local"
      - "traefik.frontend.entryPoints=mssql"
      - "traefik.port=1433"
      - "traefik.frontend.port=1433"
    networks:
      - default
    restart: unless-stopped    
  sql02:
    image: microsoft/mssql-server-windows-developer
    environment:
      - ACCEPT_EULA=Y
    hostname: sql02
    domainname: sql02.local
    networks:
      - default
    restart: unless-stopped
    labels:
      - "traefik.frontend.rule=Host:sql02.docker.local,sql02,sql02.local"
      - "traefik.frontend.entryPoints=mssql"
      - "traefik.port=1433"
      - "traefik.frontend.port=1433"
    networks:
      - default
    restart: unless-stopped    

networks:
  default:
    external:
      name: nat

HTTP 역방향 프록시이기 때문에 traefik을 사용할 수 없습니다.

당신은 SQL 서버를 듣고 TCP를 통해 통신합니다.

네가 최종 목표를 이해하지 못한다. 왜 2 개의 다른 sql-server를 사용하고 있습니까?

그것은 당신이 원하는 것에 달려 있지만 두 가지 해결책이있을 수 있습니다 :

  • 더 간단한 솔루션을 사용할 수 있습니까? 분리를위한 다른 데이터베이스, 역할 및 사용 권한.
  • SQL Server Always On 의 문서를 검색 할 수 있지만 쿼리를 특정 서버로 라우팅하는 것이 쉽지는 않습니다.




traefik