我正在使用 gluetun 和 invidious,这使我可以通过任何我想要的方式代理 YouTube 流量。然而,当处理公共实例上的高请求数时,提高 Invidious 可用性的官方方法是使用副本。 Invidious 的 docker-compose 文件如下所示。
invidious:
build:
context: .
dockerfile: docker/Dockerfile
deploy:
replicas: 8
restart: unless-stopped
network_mode: "service:gluetun"
#ports:
# - "127.0.0.1:3000:3000"
问题是,当副本启动时,它们都尝试绑定到同一端口上的gluetun网络。
invidious-invidious-4 | from /usr/share/crystal/src/socket/addrinfo.cr:74:17 in 'initialize:reuse_port'
invidious-invidious-4 | from /usr/share/crystal/src/socket/tcp_server.cr:36:3 in 'new:reuse_port'
invidious-invidious-4 | from /usr/share/crystal/src/http/server.cr:213:18 in 'bind_tcp'
invidious-invidious-4 | from lib/kemal/src/kemal.cr:52:7 in 'run'
invidious-invidious-4 | from lib/kemal/src/kemal.cr:16:5 in 'run'
invidious-invidious-4 | from lib/kemal/src/kemal.cr:15:3 in 'run'
invidious-invidious-4 | from src/invidious.cr:238:1 in '__crystal_main'
invidious-invidious-4 | from /usr/share/crystal/src/crystal/main.cr:115:5 in 'main_user_code'
invidious-invidious-4 | from /usr/share/crystal/src/crystal/main.cr:101:7 in 'main'
invidious-invidious-4 | from /usr/share/crystal/src/crystal/main.cr:127:3 in 'main'
invidious-invidious-4 | from src/env/__libc_start_main.c:95:2 in 'libc_start_main_stage2'
有没有办法解决这个问题,让他们在使用glutun网络时玩得很好?不使用gluetun时不会发生这种情况,所以我假设network_mode是问题所在。
端口范围也不适用于网络模式,即
invidious:
build:
context: .
dockerfile: docker/Dockerfile
deploy:
mode: replicated
replicas: 8
restart: unless-stopped
network_mode: "service:pia"
ports:
- "3000-3008:3000"
Error response from daemon: conflicting options: port publishing and the container type network mode
有什么办法可以解决这个问题,让他们在使用glutun的网络时玩得很好吗?
只有一个进程可以绑定到特定命名空间中的给定端口。
我不会尝试将所有 invidious 容器连接到gluetun 的网络,而是让它们都在自己的网络命名空间中运行,然后运行一个循环代理,该代理既连接到gluetun 的网络又连接到invidious 所在的网络。已部署副本。所以请求流程如下所示:
+--> invidious0
|
+--> invidious1
|
request +--> gluetun +--> proxy +-----> invidious2
|
+--> invidious3
|
+--> invidious4
代理容器将连接到两个网络——VPN 网络和 invidious 网络。包含的gluetun只会连接到vpn网络,并且invidious副本只会连接到invidious网络。像