我可以将Traefik用于网站,因为它们在连接时使用标头。 但是我想通过docker运行多个不同的SQL Server实例,这些实例将在外部可用(在docker主机外部,可能在本地网络外部)
那么,有什么可以允许连接到在同一docker实例上运行的不同sql服务器实例的,而不必为它们提供不同的端口或外部ip地址,以便某人可以访问
sql01.docker.local,1433
和sql02.docker.local,1433
(来自SQL工具)。
开始其他问题
由于没有回复,也许有一种方法可以使诸如sql.docker.local\instance1
和sql.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
答案 0 :(得分:0)
您不能使用traefik,因为它是HTTP反向代理。
您是sql服务器,可以通过TCP进行监听和通信。
我不明白你的最终目标是什么。 为什么要使用2种不同的sql-server?
这取决于您想要什么,但是您可能有两种解决方案:
答案 1 :(得分:0)
没有像HTTP服务器那样对数据库的“虚拟”访问。因此-指向相同IP的其他主机名无济于事。
如果您为所有实例坚持使用端口1433,那么除了使用两个不同的外部IP,我看不到其他任何方法。
如果您在Linux机器上,则可以尝试一些iptables魔术,但是它并不雅致,并且允许在任何时候仅访问您的一个实例。 Windows可能具有等效的iptables(我从未听说过),但一次只能逃避一次。
我的建议-使用多个端口公开服务器。
答案 2 :(得分:0)
如前所述,traefik不是正确的解决方案,因为它是仅HTTP的LoadBalancer。
我现在可以以3种不同的方式思考以实现您想要做的事情: