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




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

웹 사이트에 연결할 때 헤더를 사용하기 때문에 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 서버와 같은 데이터베이스에는 "가상"액세스가 없습니다. 따라서 동일한 IP를 가리키는 추가 호스트 이름이 도움이되지 않습니다.

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

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

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


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

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

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

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

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




traefik