首页信息安全GITLAB-CI-加入由docker-compose创建的网络

GITLAB-CI-加入由docker-compose创建的网络

admin 12-21 13:42 81次浏览

我正在创建一个gitlab-ci以在我的应用程序上运行e2e测试,因此,鉴于我有这个docker-compose.yml:

services:
  chrome:
    image: zenika/alpine-chrome:latest
    command: [
      chromium-browser,
      "--headless",
      "--no-sandbox",
      "--disable-gpu",
      "--ignore-certificate-errors",
      "--reduce-security-for-testing",
      "--remote-debugging-address=0.0.0.0",
      "--remote-debugging-port=9222",
      "https://google /",
    ]
    ports:
      - "9222:9222"
    networks:
      - test-e2e

networks:
  test-e2e:
    ipam:
      driver: default
      config:
        - subnet: 172.28.0.0/16

当我运行时,docker-compose up一切工作正常,并且在本地计算机上,我能够访问localhost:9222和访问chrome调试器。


但是,当我在gitlab-ci上运行相同的作业时,出现ECONNREFUSED错误

F---F

Failures:

1) Scenario: List of Profiles # src/features/profile.feature:3
   ? Before # dist/node/development/webpack:/hooks/puppeteer.hooks.ts:17
       Failed to fetch browser webSocket url from http://localhost:9222/json/version: connect ECONNREFUSED 127.0.0.1:9222
       Error: connect ECONNREFUSED 127.0.0.1:9222
           at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1191:14)

因此很明显,我无法加入docker-compose网络并localhost:9222从工作中访问

gitlab-ci.yml很简单,看起来像这样:

E2E tests:
  stage: test end-to-end
  image:
    name: docker/compose:1.24.1
    entrypoint: ["/bin/sh", "-c"]
  services:
    - docker:dind
  before_script:
    - apk --update add nodejs yarn
    - docker-compose -f test-e2e.yaml up -d
  script:
    - yarn test:cucumber
  after_script:
    - docker-compose -f test-e2e.yaml down

yarn test:cucumber基本上是运行黄瓜和木偶试图localhost:9222获取chrome的元数据。


如何从gitlab-ci作业中加入docker-compose创建的网络?

我无权编辑跑步者配置

Pierre B... 7

TL; DR在CI上,您chrome可以使用docker:9222(或更普遍地:)访问您的容器,而不是localhost:9222

说明

根据您的gitlab-ci.yml,您将启动2个容器:

docker/compose:1.24.1您将要运行的容器docker-composeyarn命令

docker:dind在其上运行Docker Daemon的服务器。可docker/compose:1.24.1通过主机名从容器访问此容器docker(有关访问服务,请参见GitlabCI文档)

在Docker中运行容器时,该容器实际上是由Docker守护程序启动,它将运行并公开运行守护程序的主机上的端口。

在您的计算机上,Docker守护程序在本地运行,并将在本地网络上公开容器端口,从而使您可以chrome通过以下方式访问容器localhost

在CI上,您正在从一个docker/compose:1.24.1容器运行命令,但是Docker守护进程正在另一个容器(另一个主机)中运行:该docker:dind容器。chrome容器将docker:dind容器内部创建,并且其端口从同一容器暴露。您只需要访问docker:dind将暴露chrome端口的容器即可。

通过localhostdocker/compose:1.24.1容器中使用,您将无法到达,chrome因为其端口不在docker/compose:1.24.1容器上而是在docker:dind容器上暴露。您需要指定其主机(docker)和公开端口(9222



1> Pierre B...:

TL; DR在CI上,您chrome可以使用docker:9222(或更普遍地:)访问您的容器,而不是localhost:9222

说明

根据您的gitlab-ci.yml,您将启动2个容器:

docker/compose:1.24.1您将要运行的容器docker-composeyarn命令

docker:dind在其上运行Docker Daemon的服务器。可docker/compose:1.24.1通过主机名从容器访问此容器docker(有关访问服务,请参见GitlabCI文档)

在Docker中运行容器时,该容器实际上是由Docker守护程序启动,它将运行并公开运行守护程序的主机上的端口。

在您的计算机上,Docker守护程序在本地运行,并将在本地网络上公开容器端口,从而使您可以chrome通过以下方式访问容器localhost

在CI上,您正在从一个docker/compose:1.24.1容器运行命令,但是Docker守护进程正在另一个容器(另一个主机)中运行:该docker:dind容器。chrome容器将docker:dind容器内部创建,并且其端口从同一容器暴露。您只需要访问docker:dind将暴露chrome端口的容器即可。

通过localhostdocker/compose:1.24.1容器中使用,您将无法到达,chrome因为其端口不在docker/compose:1.24.1容器上而是在docker:dind容器上暴露。您需要指定其主机(docker)和公开端口(9222

GITLAB-CI-加入由docker-compose创建的网络
【云分发 UCDN】域名配置:概述,域名基本信息和操作和回源配置 【容器云 UK8S】最佳实践:权限管理之了解RBAC和权限管理实践
相关内容