Docker 上的 Selenium:在同一 `docker-compose` 文件中测试 Docker 图像
Selenium on Docker: Testing a Docker Image within the same `docker-compose` file
场景:
- Docker 运行 我的应用在
localhost:9000
上的图片
- Docker 使用 Selenium Webdriver 的图像
- 我想要 运行 反对的 Selenium 测试。
我从这个开始SeleniumHQ/docker-selenium
Docker撰写:
version: "3.1"
services:
my-app:
image: pame/play-binding-form-server
networks:
- mynet
...
ports:
- "9000:9000"
chrome-webdriver:
image: selenium/standalone-chrome:3.141.59-europium
networks:
- mynet
volumes:
- /dev/shm:/dev/shm
ports:
- "4444:4444"
depends_on:
- my-app
networks:
mynet:
docker ps
:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
53ac65c2babd selenium/standalone-chrome:3.141.59-europium "/opt/bin/entry_poin…" 13 minutes ago Up 13 minutes 0.0.0.0:4444->4444/tcp e2e_chrome-webdriver_1
fc0ca2af3148 pame/play-binding-form-server "/pme123/conf/docker…" 17 minutes ago Up 17 minutes 0.0.0.0:9000->9000/tcp, 9443/tcp pme123-forms
d
我的测试看起来像:
import org.openqa.selenium.remote.DesiredCapabilities
import org.openqa.selenium.remote.RemoteWebDriver
val driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"),
DesiredCapabilities.chrome())
driver.get("http://localhost:9000/")
这个returns一个HTML页:
我尝试了不同的版本,但没有成功。
当 运行在本地 webdriver
时一切正常。
这种情况是不可能的还是我错过了什么?
这个问题很经典
由于 my-app
和 chrome-webdriver
在两个 单独的 容器上,chrome-webdrive
无法到达 my-app
它的 本地主机(127.0.0.1)。
请记住,docker 的功能之一是使用容器的概念隔离 运行 环境。也就是说,您主机上的 localhost
与容器中的 localhost
不同,容器 A 上的 localhost
与容器 B 上的不同,它们都有自己的本地主机。
要在同一网络内连接两个容器,只需使用它们的容器名称或服务名称作为主机名。
你的情况driver.get("http://my-app:9000/")
。
场景:
- Docker 运行 我的应用在
localhost:9000
上的图片
- Docker 使用 Selenium Webdriver 的图像
- 我想要 运行 反对的 Selenium 测试。
我从这个开始SeleniumHQ/docker-selenium
Docker撰写:
version: "3.1"
services:
my-app:
image: pame/play-binding-form-server
networks:
- mynet
...
ports:
- "9000:9000"
chrome-webdriver:
image: selenium/standalone-chrome:3.141.59-europium
networks:
- mynet
volumes:
- /dev/shm:/dev/shm
ports:
- "4444:4444"
depends_on:
- my-app
networks:
mynet:
docker ps
:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
53ac65c2babd selenium/standalone-chrome:3.141.59-europium "/opt/bin/entry_poin…" 13 minutes ago Up 13 minutes 0.0.0.0:4444->4444/tcp e2e_chrome-webdriver_1
fc0ca2af3148 pame/play-binding-form-server "/pme123/conf/docker…" 17 minutes ago Up 17 minutes 0.0.0.0:9000->9000/tcp, 9443/tcp pme123-forms
d
我的测试看起来像:
import org.openqa.selenium.remote.DesiredCapabilities
import org.openqa.selenium.remote.RemoteWebDriver
val driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"),
DesiredCapabilities.chrome())
driver.get("http://localhost:9000/")
这个returns一个HTML页:
我尝试了不同的版本,但没有成功。
当 运行在本地 webdriver
时一切正常。
这种情况是不可能的还是我错过了什么?
这个问题很经典
由于 my-app
和 chrome-webdriver
在两个 单独的 容器上,chrome-webdrive
无法到达 my-app
它的 本地主机(127.0.0.1)。
请记住,docker 的功能之一是使用容器的概念隔离 运行 环境。也就是说,您主机上的 localhost
与容器中的 localhost
不同,容器 A 上的 localhost
与容器 B 上的不同,它们都有自己的本地主机。
要在同一网络内连接两个容器,只需使用它们的容器名称或服务名称作为主机名。
你的情况driver.get("http://my-app:9000/")
。