Sql server 路由到通过默认端口上的Docker运行的不同SQL Server实例
我可以将Traefik用于网站,因为它们在连接时使用标题。 但我希望有多个不同的SQL Server实例通过docker运行,这些实例将在外部可用(在docker主机之外,可能在本地网络之外) 那么,是否有任何东西允许连接到同一docker实例上运行的不同sql server实例,而不必为它们提供不同的端口或外部ip地址,以便有人可以访问 SQL工具中的Sql server 路由到通过默认端口上的Docker运行的不同SQL Server实例,sql-server,docker,docker-compose,traefik,Sql Server,Docker,Docker Compose,Traefik,我可以将Traefik用于网站,因为它们在连接时使用标题。 但我希望有多个不同的SQL Server实例通过docker运行,这些实例将在外部可用(在docker主机之外,可能在本地网络之外) 那么,是否有任何东西允许连接到同一docker实例上运行的不同sql server实例,而不必为它们提供不同的端口或外部ip地址,以便有人可以访问 SQL工具中的sql01.docker.local,1433和sql02.docker.local,1433 开始附加问题 由于没有回复,可能有一种方法可以创
sql01.docker.local,1433
和sql02.docker.local,1433
开始附加问题
由于没有回复,可能有一种方法可以创建不同的实例,例如:sql.docker.local\instance1
和sql.docker.local\instance2
,尽管我认为这也不可能
结束附加问题
这是我尝试使用的docker compose文件的一个示例(在我意识到对sql server的查询不会通过主机头发送之前——或者我错了?)
不能使用traefik,因为它是HTTP反向代理 您是sql server,通过TCP进行侦听和通信 我不明白你的最终目标是什么。 为什么要使用两种不同的sql server 这取决于您想要什么,但您可能有两种解决方案:
- 你能用一个更简单的解决方案吗?用于分离的不同数据库、角色和权限
- 您可以搜索的文档,但将查询路由到特定服务器似乎并不容易
我的建议-使用多个端口公开服务器。如前所述,traefik不是正确的解决方案,因为它是一个仅限HTTP的负载平衡器 我现在可以用三种不同的方式来实现你的目标:
- 使用像HAproxy这样的TCP负载平衡器
- 将服务器设置为Docker Swarm模式(),这将允许使用透明路由绑定同一端口
- 使用一个服务发现服务,如领事和SRV记录,可以提取端口号(这可能会超出您的需要,而且设置起来很复杂)
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