为什么这条生产线必须与Selenium和Docker Swarm合作?

为什么这条生产线必须与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

接下来,我让网格工作没有任何问题。然而,我宁愿使用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_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地址