【问题标题】:Selenium not able to access website hosted in another Docker containerSelenium 无法访问托管在另一个 Docker 容器中的网站
【发布时间】:2021-06-01 01:34:30
【问题描述】:

任何 docker,Selenium 专家,我将不胜感激!

我有一个 Web 应用程序 (LNMP),我在本地使用 docker 作为开发环境。

现在,我正在尝试添加一个额外的 Selenium 容器,以便将其用于自动化测试 (https://hub.docker.com/r/selenium/standalone-chrome-debug)。

我不知道如何设置从 Selenium 容器到我的应用程序容器 (Nginx) 的连接,因为该网站尚未发布。

当我在本地开发时,我使用测试域,并通过在本地编辑主机文件来连接到网站。

例如

127.0.0.1 website.test

我已经尝试在 yaml 文件中添加 Selenium 容器,看起来很成功,并且我可以使用主机中的 VNC 客户端连接到容器。

但是当我尝试从 Selenium 浏览器访问该网站时,我总是遇到连接被拒绝。看起来 DNS 工作正常,否则 Chrome 会给我一个 DNS 错误而不是连接拒绝。

我的 yaml 文件看起来像,如您所见,我添加了一个 Selenium 容器(browser_chrome)和一个网络(测试)。 app 是原始的 Nginx 容器。

networks:
  testing:

  
version: "3"
services:
  browser_chrome:
      image: selenium/standalone-chrome-debug:3.8.1
      ports:
        - "5900:5900"
      networks:
        - testing
  app:
      networks:
        testing:
          aliases:
            - "website.test"

这是没有 Selenium 设置的原始 docker 文件,https://github.com/markshust/docker-magento/blob/master/compose/docker-compose.yml,基本上,我添加了 Selenium 容器(browser_chrome)和网络(测试)来连接它们。

我只知道 docker 的基本知识,所以任何帮助都将不胜感激!

:)

【问题讨论】:

    标签: docker selenium docker-compose


    【解决方案1】:

    首先,您不必创建静态网络来使用它并让 docker 自己适应它 = 将来的问题更少(至少这是我的观点)。通过在 compose 文件中不指定 docker 网络,您离开 docker 以创建名为 default 的网络(从容器的角度来看),从主机的角度来看称为 <stack-name>_default

    您必须了解的第二件事是堆栈中两个容器之间的网络和连接是如何工作的 -> 对于容器之间的连接,您必须使用服务名称(在您的情况下为 app),因为 docker 会自动为其创建 DNS 记录

    这里是一个简单的 compose 文件来测试上面的有效性:

    version: "3"
    services:
      server:
        image: containous/whoami
      client:
        image: appropriate/curl
        command: "curl -vvv http://server"
    

    以及控制台和服务日志的输出

    $ docker stack deploy -c docker-compose.yml test
    Creating network test_default
    Creating service test_server
    Creating service test_client
    
    $ docker service logs -f test_client
    test_client.1.fv8dq5b80dkk@...    | * Rebuilt URL to: http://server/
    test_client.1.fv8dq5b80dkk@...    |   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
    test_client.1.fv8dq5b80dkk@...    |                                  Dload  Upload   Total   Spent    Left  Speed
      0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 10.0.5.2...
    test_client.1.fv8dq5b80dkk@...    | * TCP_NODELAY set
    test_client.1.fv8dq5b80dkk@...    | * Connected to server (10.0.5.2) port 80 (#0)
    test_client.1.fv8dq5b80dkk@...    | > GET / HTTP/1.1
    test_client.1.fv8dq5b80dkk@...    | > Host: server
    test_client.1.fv8dq5b80dkk@...    | > User-Agent: curl/7.59.0
    test_client.1.fv8dq5b80dkk@...    | > Accept: */*
    test_client.1.fv8dq5b80dkk@...    | > 
    test_client.1.fv8dq5b80dkk@...    | < HTTP/1.1 200 OK
    test_client.1.fv8dq5b80dkk@...    | < Date: Tue, 01 Jun 2021 09:54:21 GMT
    test_client.1.fv8dq5b80dkk@...    | < Content-Length: 162
    test_client.1.fv8dq5b80dkk@...    | < Content-Type: text/plain; charset=utf-8
    test_client.1.fv8dq5b80dkk@...    | < 
    test_client.1.fv8dq5b80dkk@...    | { [162 bytes data]
    test_client.1.fv8dq5b80dkk@...    | Hostname: 7d91b392ac0a
    test_client.1.fv8dq5b80dkk@...    | IP: 127.0.0.1
    test_client.1.fv8dq5b80dkk@...    | IP: 10.0.5.3
    test_client.1.fv8dq5b80dkk@...    | IP: 172.18.0.4
    test_client.1.fv8dq5b80dkk@...    | RemoteAddr: 10.0.5.4:45600
    test_client.1.fv8dq5b80dkk@...    | GET / HTTP/1.1
    test_client.1.fv8dq5b80dkk@...    | Host: server
    test_client.1.fv8dq5b80dkk@...    | User-Agent: curl/7.59.0
    test_client.1.fv8dq5b80dkk@...    | Accept: */*
    test_client.1.fv8dq5b80dkk@...    | 
    100   162  100   162    0     0  23142      0 --:--:-- --:--:-- --:--:-- 27000
    test_client.1.fv8dq5b80dkk@...    | * Connection #0 to host server left intact
    

    【讨论】:

    • 感谢您的回复,我可以使用 app:8443 连接到应用程序 Nginx,但我在浏览器中被重定向到 website.test 并收到 DNS 错误,说域无法得到解决。如果我必须使用域进行测试,我该如何设置 DNS?
    • cmon mate ... 设置 nginx 超出了您的问题范围。比设置 DNS 服务器更远。首先,您必须掌握网络和 docker 的基本功能。不要从头开始。现在使用 IP:PORT 来检查功能
    • 我的问题是如果我必须使用域来访问网站,我如何在 Selenium 和 Nginx 容器之间设置 DNS。我尝试使用容器名称,根据您的评论,它允许我连接到 Nginx 容器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多