gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 04:01:51 25 4
gpt4 key购买 nike

我正在创建一个 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.com/",
]
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基本上运行 cucumber 和傀儡试图访问 localhost:9222获取 chrome 的元数据。

如何从 gitlab-ci 作业加入 docker-compose 创建的网络?
  • 我无权编辑转轮配置
  • 最佳答案

    TL;博士 在 CI 上您的 chrome使用 docker:9222 可以访问容器(或更一般地说 <name-of-the-dind-service-on-ci>:<exposed-port> ),而不是 localhost:9222
    说明

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

  • docker/compose:1.24.1您将运行的容器 docker-composeyarn命令
  • docker:dind其中一个Docker Daemon will run .这个容器可以从 docker/compose:1.24.1 访问通过主机名的容器 docker ( see GitlabCI doc on accessing services )

  • 在Docker中运行容器时,容器实际上是启动的 由 Docker 守护进程 并将在运行守护程序的主机上运行并公开端口。
  • 在您的机器上,Docker 守护进程在本地运行,并将在您的本地网络上公开容器端口,让您能够访问您的 chrome。容器通过 localhost
  • 在 CI 上,您正在从 docker/compose:1.24.1 运行您的命令。容器,但 Docker 守护进程正在另一个容器(不同的主机)中运行:docker:dind容器。 chrome容器将是 在内部创建 docker:dind 容器及其从同一个容器暴露的端口。您只需要访问 docker:dind将暴露 chrome 的容器端口。

  • 通过使用 localhost来自您的 docker/compose:1.24.1容器,您将无法访问 chrome因为它的端口没有暴露在 docker/compose:1.24.1 上容器但来自 docker:dind容器。您需要指定其主机( docker )和暴露的端口( 9222 )

    关于docker - GITLAB-CI - 加入由 docker-compose 创建的网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56784919/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com