设置
- gitlab 15.8-ee
- Windows Server 2019 Datacenter(安装了Windows功能容器)
- 安装了executor
docker-windows
的gitlab runner
问题
所有不依赖于服务的构建脚本都可以正常运行。
现在我想使用mysql作为我的集成测试的服务。我已经构建了一个可以使用的自定义mysql容器。
过去我在linux上使用了相同的docker设置。所以这是肯定应该工作的东西。
问题是我的容器不能解析或ping主机名db。我已经连接到我的构建容器和mysql容器来确定ip地址,并验证它们可以互相ping。
build-container-ip: 172.25.177.32
mysql-container-ip: 172.25.187.223
我希望构建容器可以解析主机名为db
的mysql容器,但事实并非如此。
我不确定这是gitlab docker runner的问题还是windows上的docker的问题。我很有信心构建脚本本身是好的。我如何跟踪或解决问题?我的构建容器需要知道服务的ip。
示例脚本和输出
stages:
- build
build:
image: registry.company.tld/company/build-images/devenv:latest
stage: build
tags:
- windows
- docker
services:
- name: registry.company.tld/company/build-images/mysql-win:latest
alias: db
variables:
MYSQL_ROOT_PASSWORD: $MYSQL_ROOT_PASSWORD
script:
- mysqlping -h db
相关输出
C:\mysql\bin\mysqladmin.exe: connect to server at 'db' failed
error: 'Unknown MySQL server host 'db' (2)'
Check that mysqld is running on db and that the port is 3306.
You can check this by doing 'telnet db 3306'
使用docker inspect
可以看出什么
- 生成容器具有命名的主机名
"Config": {
"Hostname": "runner-gkokct4y-project-10-concurrent-0",
"Domainname": "",
- 服务容器具有随机主机名
"Config": {
"Hostname": "ee98c58eed41",
"Domainname": "",
- 我可以从构建容器ping随机主机名
1条答案
按热度按时间ruarlubt1#
我自己想出来的,解决办法在连接服务一节
要使此解决方案起作用,必须使用为每个作业创建新网络的网络模式。
TLDR:您必须在运行器级别(在config.toml中)设置特性标志
FF_NETWORK_PER_BUILD
或
gitlab-ci.yml
文件中我在
gitlab-ci.yml
文件中设置了它,它立刻就像预期的那样工作了。过去我只在kubernetes的gitlab-runner上使用过这个设置。由于docs的功能标志明确提到了docker executor允许使用docker executor为每个构建创建Docker网络
我猜这是kubernetes runner的默认行为。
因此,与我最初的假设相反,这个问题与windows上的docker有关,它可能在linux docker上也不起作用,所以我将改写标题以反映这一点。