GITLAB-CI-加入由docker-compose创建的网络
我正在创建一个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-compose
和yarn
命令
将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
端口的容器即可。
通过localhost
从docker/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-compose
和yarn
命令
将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
端口的容器即可。
通过localhost
从docker/compose:1.24.1
容器中使用,您将无法到达,chrome
因为其端口不在docker/compose:1.24.1
容器上而是在docker:dind
容器上暴露。您需要指定其主机(docker
)和公开端口(9222
)