我正在运行一个Selenoid应用程序测试自动化脚本,并希望针对本地应用程序运行此脚本。但是,我找不到如何将本地应用程序(运行在端口8787
上(公开给Selenoid。我发现下面的帖子讨论了一个类似的问题,但它并不能解决我的问题。链接线程描述使用主机的ip地址。但是,我想使我的测试系统独立。每个系统的主机ip地址不同,很难独立检索到。
我已经尝试将暴露字段添加到我的docker撰写文件中:
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容器没有获得相同的选项。
是否有任何方法可以以独立于系统/os的方式(通过docker-compose.yml
文件中的配置、传递给远程驱动程序的功能或任何其他方式(将我的主机端口8787
暴露给我的Selenoid容器?
Selenoid在标准Docker容器中运行浏览器,因此适用于Docker的任何内容都适用于Selenoid浏览器。Docker是为所有交互部件都打包到容器中的情况而创建的,在这种情况下,您的服务上有传统的Docker链接或现代的Docker自定义网络。如果您仍然想在主机上运行应用程序而不将其打包到容器中,则必须使用主机IP或在某些平台上Docker提供特定域名,例如Mac上的docker.for.mac.localhost
。
我终于意识到,是的,我运行的应用程序实际上运行在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"