我正在运行Selenoid应用程序测试自动化脚本,并且想针对本地应用程序运行此脚本。但是,我找不到如何将本地应用程序(在端口8787
上运行)公开给Selenoid。我发现the following thread在讨论类似的问题,但是并不能解决我的问题。链接的线程描述了使用主机的IP地址。但是,我想使我的测试系统独立。每个系统的主机IP地址都不同,并且很难独立获取系统。
我已经尝试将暴露字段添加到我的docker compose文件中
version: '3'
services:
selenoid:
network_mode: bridge
image: aerokube/selenoid:latest-release
volumes:
- "${PWD}/run:/etc/selenoid"
- "/var/run/docker.sock:/var/run/docker.sock"
- "${PWD}/run/video:/opt/selenoid/video"
- "${PWD}/run/logs:/opt/selenoid/logs"
environment:
- OVERRIDE_VIDEO_OUTPUT_DIR=${PWD}/run/video
- TZ=Europe/Amsterdam
command: ["-conf", "/etc/selenoid/browsers.json", "-video-output-dir", "/opt/selenoid/video", "-log-output-dir", "/opt/selenoid/logs"]
ports:
- "4444:4444"
expose:
- "8787"
但是,这不起作用,因为由Selenoid创建的docker容器没有传递相同的选项。
是否可以通过系统/操作系统独立的方式(通过8787
文件中的配置,传递给远程驱动程序的功能或还有其他方法吗?)?
答案 0 :(得分:1)
Selenoid在标准Docker容器中运行浏览器,因此适用于Docker的所有内容均适用于Selenoid浏览器。 Docker是为将所有交互部件打包到容器中而创建的,在这种情况下,您的服务上具有旧的Docker链接或现代Docker自定义网络。如果仍要在主机上运行应用程序而不将其打包到容器中,则必须使用用户主机IP或在某些平台上Docker提供特定的域名,例如在Mac上docker.for.mac.localhost
。
答案 1 :(得分:1)
我终于意识到,是的,我运行的应用程序实际上在Docker容器中运行,因此链接它们就像将Selenoid和该应用程序放在同一个Docker网络中一样容易。最终docker-compose.yml
如下:
version: '3'
networks:
my_network_name:
external:
name: my_network_name # This assumes network is already created
services:
selenoid:
networks:
my_network_name: null
image: aerokube/selenoid:latest-release
volumes:
- "${PWD}/run:/etc/selenoid"
- "/var/run/docker.sock:/var/run/docker.sock"
- "${PWD}/run/video:/opt/selenoid/video"
- "${PWD}/run/logs:/opt/selenoid/logs"
environment:
- OVERRIDE_VIDEO_OUTPUT_DIR=${PWD}/run/video
- TZ=Europe/Amsterdam
command: ["-container-network", "my_network_name", "-conf", "/etc/selenoid/browsers.json", "-video-output-dir", "/opt/selenoid/video", "-log-output-dir", "/opt/selenoid/logs"]
ports:
- "4444:4444"
expose:
- "8787"