我正在尝试在Docker Swarm中设置Selenium。这是一个标准设置,因此集线器+复制的Firefox节点。由于我为Swarm的不同组件使用不同的网络,我遇到了网络问题。
虽然Firefox节点IP可以说是10.0.1.19
,但它会以172.19.0.4
的形式报告给Selenium Hub。集线器无法连接到此IP,因为它位于为Selenium创建的网络之外,并且节点会超时。
我发现我可以设置Firefox容器的host
,port
和remoteHost
参数,但由于一切都是动态的,我无法对这些值进行硬编码。因此,我想在Firefox节点定义中的docker-compose.yml
文件中执行类似的操作:
environment:
- SE_OPTS="-host $$HOSTNAME -port 5555 -remoteHost http://$$HOSTNAME:5555"
如果可以使用$HOSTNAME
变量,这将立即解决我的问题。不幸的是,在检查Hub日志时,我看到:
java.security.InvalidParameterException: Error: Not a correct url to register a remote : http://$HOSTNAME:5555"
显然,在将参数发送到集线器之前,参数不会更改为其值。我想发送Firefox节点的正确IP或主机名。有什么想法吗?
答案 0 :(得分:1)
解决方案是编辑Firefox Docker入口点文件并手动添加
export MYIP="$(cat /etc/hosts | grep $HOSTNAME | sed 's/\s.*$//' | tr -d '\n')"
REMOTE_HOST="http://$MYIP:5555"
REMOTE_HOST_PARAM="-remoteHost http://$MYIP:5555"
这样,节点总是根据/etc/hosts