路由到默认端口上通过Docker运行的不同SQL Server实例

Mat*_*vic 14 sql-server docker docker-compose traefik

我可以将Traefik用于网站,因为它们在连接时使用标题.但是我希望有多个不同的SQL Server实例通过docker运行,这些实例将在外部可用(在docker主机之外,可能在本地网络之外)

那么,是否有任何东西允许连接到在同一个docker实例上运行的不同sql server实例,而不必为它们提供不同的端口或外部ip地址,以便有人可以访问

sql01.docker.local,1433sql02.docker.local,1433从SQL工具.

开始附加问题

由于一直没有回复也许有办法有不同的情况,如:sql.docker.local\instance1sql.docker.local\instance2,虽然我想,也可能是不可能的

结束附加问题

这是我试图使用的docker-compose文件的一个例子(之前我意识到对sql server的查询不通过主机头发送 - 或者我错了吗?)

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
Run Code Online (Sandbox Code Playgroud)

Moi*_*ioM 0

你不能使用 traefik,因为它是一个 HTTP 反向代理。

你的sql server通过TCP监听和通信。

我不明白你的最终目标是什么。为什么你使用 2 个不同的 sql-server ?

这取决于您想要什么,但您可能有两种解决方案:

  • 你能使用更简单的解决方案吗?不同的数据库、角色和权限进行分离。
  • 您可以搜索SQL Server Always On的文档,但将查询路由到特定服务器似乎并不容易。