在GitLab CI中使用Docker镜像时,如何引用服务别名?
如何在GitLab CI中引用服务别名实现容器间通信
没问题,我来帮你搞定这个问题!在GitLab CI里,你完全可以通过服务别名和Redis容器通信,只是之前的变量引用方式搞错了——服务别名是Docker网络内的主机名,不是Shell环境变量,所以不用加${}来引用,直接把别名本身赋值给你的环境变量就行。
核心原理
当你在GitLab CI的services里给Redis设置了alias: redis,GitLab会自动把主构建容器和Redis容器放到同一个Docker网络中,这个redis别名就会成为Redis容器在该网络中的主机名。主容器不需要知道具体IP,直接用redis就能访问到Redis服务。
修改后的配置示例
我帮你调整了gitlab-ci.yml,修正了环境变量设置,同时注意Redis默认端口是6379(你之前写的1234应该是笔误):
# the image and gitlab services to use in the build stages .build-web-image: &build-web-image image: Dontworryaboutit.com:4567/folder/dockerImage:1.0.0 services: - name: redis:3.2.8 alias: redis # The job that runs the yarn run test that requires a redis server Test Web: <<: *build-web-image stage: Stage 2 before_script: # 直接把服务别名作为Redis主机名赋值给环境变量 - export REDIS_HOST=redis - export REDIS_PORT=6379 - yarn script: - yarn run test
为什么之前的尝试失败?
你之前写export REDIS=redis:1234其实方向是对的,但端口写错了;而尝试用${redis}是错误的——${redis}是Shell语法,用来引用名为redis的环境变量,但你根本没定义过这个变量,所以只会得到空字符串或者字面量${redis},和服务别名完全没关系。
额外提示
如果你的测试脚本需要完整的Redis连接字符串,也可以直接组合成一个变量:
- export REDIS_URL=redis://$REDIS_HOST:$REDIS_PORT
这样你的测试代码里只要读取REDIS_URL或者REDIS_HOST/REDIS_PORT就能正常连接到Redis服务了。
内容的提问来源于stack exchange,提问作者David Hunsicker
相关产品推荐
相关产品推荐

