Codeception web驱动程序(Docker上的Selenium)测试不起作用,因为无法查看其他容器(但在我的开发机器上工作?!)

Codeception web驱动程序(Docker上的Selenium)测试不起作用,因为无法查看其他容器(但在我的开发机器上工作?!),selenium,selenium-webdriver,docker,docker-compose,codeception,Selenium,Selenium Webdriver,Docker,Docker Compose,Codeception,我有一个docker compose设置,允许我在docker容器中运行codeception测试,包括Selenium hub和Chrome节点。这些测试在我的本地(Mac)开发机器上运行良好,但是当我在我的(Ubuntu)Gitlab runner上运行它们时,测试失败了,因为selenium chrome节点浏览器出于某种原因报告了ERR\u NAME\u NOT\u RESOLVED,我不知道为什么 我的docker composer文件 # docker-compose.yml ver

我有一个docker compose设置,允许我在docker容器中运行codeception测试,包括Selenium hub和Chrome节点。这些测试在我的本地(Mac)开发机器上运行良好,但是当我在我的(Ubuntu)Gitlab runner上运行它们时,测试失败了,因为selenium chrome节点浏览器出于某种原因报告了
ERR\u NAME\u NOT\u RESOLVED
,我不知道为什么

我的docker composer文件

# docker-compose.yml
version: '2'

services:

  composer:
    image:      registry.gitlab.com/project/api-docker-php:prod
    entrypoint:
    - php
    - -d
    - memory_limit=-1
    - /usr/local/bin/composer
    volumes:
      - ~/.composer:/.composer
      - .:/var/www/html

  php:
    image:  registry.gitlab.com/project/api-docker-php:prod
    depends_on:
      - mongo

  nginx:
    image:  cubicmushroom/nginx-letsencrypt
    ports:
      - "80:80"
      - "443:443"

  mongo:
    image:  mongo:3.2
    volumes:
      - project_api_mongodb_data:/data/db


volumes:
  project_api_mongodb_data: ~
和我的开发覆盖文件

# docker-compose.override.yml
version: '2'

services:

  certs:
    image:    nginx
    command:  >
      openssl req -new -x509 -days 365 -nodes -newkey rsa:2048 -sha256
          -subj "/C=UK/ST=Greater Manchester/L=Manchester/O=Cubic Mushroom Ltd./OU=HQ/CN=*.project.dev"
          -keyout /work/privkey.pem -out /work/fullchain.pem
    volumes:
      - project-dev-certs:/work

  php:
    image:  registry.gitlab.com/project/api-docker-php:dev
    environment:
      PHP_IDE_CONFIG: "serverName=project.dev"
    volumes:
      - .:/var/www/html

  nginx:
    volumes_from:
      - php
    volumes:
      - project-dev-certs:/etc/letsencrypt/live/project.dev
      - ./conf/nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./conf/nginx/conf.d/default.dev.conf:/etc/nginx/conf.d/default.conf
      - ./conf/nginx/conf.d/upstream.conf:/etc/nginx/conf.d/upstream.conf

  mongo:
    volumes:
      - ./data:/data/db

  selenium_hub:
    image:  selenium/hub
    ports:
      - "4444:4444"

  selenium_node_chrome:
    image:  selenium/node-chrome-debug
    expose:
      - "5555"
    ports:
      - "5900:5900"
    environment:
      - HUB_PORT_4444_TCP_ADDR=hub
      - HUB_PORT_4444_TCP_PORT=4444
      - no_proxy=localhost
    volumes:
      - "/dev/shm:/dev/shm"
    links:
      - "selenium_hub:hub"
      - "nginx:api.project.local"

  selenium_node_firefox:
    image:  selenium/node-firefox-debug
    ports:
      - "5901:5900"
    environment:
      - HUB_PORT_4444_TCP_ADDR=hub
      - HUB_PORT_4444_TCP_PORT=4444
      - no_proxy=localhost
    links:
      - "selenium_hub:hub"
      - "nginx:api.project.local"

volumes:
  project-dev-certs: ~
这是我的codeception acceptance.suite.yml,如果它也有帮助的话

# acceptance.suite.yml
class_name: AcceptanceDude
modules:
  enabled:
    - MongoDb
    - WebDriver:
        # Uses link alias as defined on selenium_node_chrome & selenium_node_firefox containers in docker compose
        # override files
        url:      'http://api.project.local/app_test.php/'
        browser:  chrome
        host:     selenium_hub
        port:     4444
    - \Project\Common\Test\Helper\Fixtures:
        depends:  Symfony
    - \Project\SymfonyBundle\CalculationBundle\Test\Helper\CalculationRecords:
        depends:  MongoDb
    - \Project\SymfonyBundle\ModuleBundle\Test\Helper\QuestionRecords:
        depends:  MongoDb
    - \Project\SymfonyBundle\UserBundle\Test\Helper\UserAuthentication:
        depends:    Symfony
        web_driver: WebDriver
    - \Project\Tests\Helper\WebDriverSymfonyCompanion:
        depends:
          - Symfony
          - WebDriver
最后,测试的前几行失败了

// codeceptionTestCept.php
<?php
declare(strict_types = 1);

use Codeception\Scenario;
use Project\SymfonyBundle\ManagementBundle\Test\AcceptanceDude;
use Project\SymfonyBundle\UserBundle\DataFixtures\MongoDB\ProjectAdminUser;

/** @var Scenario $scenario */

$I = new AcceptanceDude($scenario);
$I->wantTo('add a calculation to a module');

$I->loadFixtures(['@ManagementBundle:LoadModules.php', '@UserBundle:ProjectAdminUser.php']);
$I->amLoggedInAs(ProjectAdminUser::EMAIL, ProjectAdminUser::PASSWORD);
$I->amOnRoute('project_admin_get_module', ['slug' => 'community']);
$I->seeCurrentRouteIs('project_admin_get_module', ['slug' => 'community']);

事实证明,我的Nginx容器依赖于我的dev ssl证书,该证书是在我的dev机器上生成的,而不是在我的CI服务器上生成的……所以启动后就立即停止了


难怪selenium节点看不到它

结果表明,我的Nginx容器依赖于我的dev ssl证书,我在我的dev机器上生成了这些证书,但在我的CI服务器上没有生成这些证书……所以启动后就直接停止了


难怪selenium节点看不到它

这在IRC中很难排除故障,但很高兴你发现了。在IRC中很难排除故障,但很高兴你发现了。
# Local dev machine…
Docker version 1.12.3, build 6b644ec
docker-compose version 1.8.1, build 878cff1

# Gitlab runner…
Docker version 1.12.3, build 6b644ec
docker-compose version 1.8.1, build 878cff1