为什么这条生产线必须与Selenium和Docker Swarm合作?
接下来,我让网格工作没有任何问题。然而,我宁愿使用Docker Swarm,所以我将k8s文件翻译成Docker-compose.yml为什么这条生产线必须与Selenium和Docker Swarm合作?,selenium,docker,kubernetes,Selenium,Docker,Kubernetes,接下来,我让网格工作没有任何问题。然而,我宁愿使用Docker Swarm,所以我将k8s文件翻译成Docker-compose.yml version: '3.6' services: hub: image: selenium/hub:3.11 ports: - "4444:4444" chrome: image: selenium/node-chrome:3.11 environment: HUB_PORT_4444_TCP
version: '3.6'
services:
hub:
image: selenium/hub:3.11
ports:
- "4444:4444"
chrome:
image: selenium/node-chrome:3.11
environment:
HUB_PORT_4444_TCP_ADDR: hub
HUB_PORT_4444_TCP_PORT: 4444
firefox:
image: selenium/node-firefox:3.11
environment:
HUB_PORT_4444_TCP_ADDR: hub
HUB_PORT_4444_TCP_PORT: 4444
堆栈已部署,所有容器都在运行。但是,我只能访问网格的主页(http://localhost:4444
)。如果我试图访问控制台(http://localhost:4444/grid/console
),该页面从未加载,事实上,通过浏览器的开发工具检查,在“网络”选项卡中甚至没有对此类资源的请求
在不同的电脑上试过,同样的。。。所以奇怪的事情发生了
在搜索了几分钟的selenium grid docker swarm之后,我发现了一些过时的教程,这些教程还将entrypoint:bash-c'SE_OPTS=“-host$$HOSTNAME”/opt/bin/entry_point.sh”添加到了chrome和firefox容器中。我也是,一切都开始顺利进行,就像在库伯内特斯一样
所以我的问题是,为什么这条线是必要的,这样网格才能工作。为什么k8s不需要它?您可以在另一个StackOverflow中找到解释
简言之:
这是因为容器在Swarm模式下有两个IP地址,而节点选择了错误的地址并将其发送到集线器。此更改将使节点公布其主机名,以便集线器可以通过DNS找到节点
在Kubernetes中,pod中的容器只有一个IP地址,这就是为什么您不需要设置该变量,您的应用程序总是选择正确的IP。您可以在另一个StackOverflow中找到解释
简言之:
这是因为容器在Swarm模式下有两个IP地址,而节点选择了错误的地址并将其发送到集线器。此更改将使节点公布其主机名,以便集线器可以通过DNS找到节点
在Kubernetes中,pod中的容器只有一个IP地址,这就是为什么不需要设置该变量,应用程序总是选择正确的IP地址