Codeception的Web驱动程序(在Docker上的Selenium)testing不能看到其他容器(尽pipe在我的开发机器?)

我有一个docker compose setup,允许我在Docker容器中运行代码testing,包括一个Selenium hub和Chrome节点。 testing在我的本地(Mac)开发机器上运行良好,但是当我在我的(Ubuntu)Gitlab运行器上运行它们时,testing失败,因为selenium铬节点浏览器报告ERR_NAME_NOT_RESOLVED ,出于某种原因,找出原因。

我的dockercomposer php文件…

 # 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 

最后,testing的前几行失败了。

 // 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']); 

我不明白为什么Docker在两种不同的环境中行为不同,因为我认为它应该把所有事情从外部世界隔离开来。

任何帮助将不胜感激。 提前致谢。

作为参考,这里是我的docker版本…

 # 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 

原来,我的Nginx容器依赖于我的开发SSL证书,这是我在开发机器上生成的,而不是在我的CI服务器上…所以开始后就停止了。

难怪selenium节点看不到!