【问题标题】:Unable to connect to redis docker container from inside jenkins docker container无法从 jenkins docker 容器内部连接到 redis docker 容器
【发布时间】:2020-02-08 10:59:47
【问题描述】:

我在这样的 docker 容器中运行 Jenkins

version: '3.4'
services:
  redis:
    image: redis:alpine
    ports:
      - 6379:6379
  jenkins:
    image: jenkinsci/blueocean
    user: root
    ports:
      - "8080:8080"
   volumes:
      - ./jenkins_data:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock

这是我的 Jenkinsfile

pipeline {
  agent { docker { image 'python:3.7.0' } }
  environment { 
        ENV = 'test'
    }
  stages {
    stage('install dependencies') {
      steps {
        sh 'pip install -r requirements.txt'
      }
    }

    stage('test') {
      steps {
        sh 'python app/tests/test_user.py'
      }   
    }
 }

  • 要运行测试文件,Flask 应用需要连接到 redis。我尝试将这些 url 用于 redis 主机,例如 localhost:6379, redis:6379, 0.0.0.0:6379 但没有任何效果。他们都给我连接错误或连接被拒绝。
  • 知道如何从 jenkins docker 容器内部连接到 redis 吗?

【问题讨论】:

  • redis 应该以redis:6379 的形式提供,如果您不想在内部网络之外公开服务,则不必定义ports 部分
  • 您能否更具体地定义“但没有任何工作”,您收到的错误消息是什么
  • redis.exceptions.ConnectionError: Error -2 connecting to redis:6379. Name or service not known. 。当我尝试连接到 redis 时,它给了我这个错误。我不明白为什么它不起作用....

标签: docker jenkins redis docker-compose


【解决方案1】:
version: '3'

不起作用。

但是

version: '2'

作品

这是我的测试

 32       image: daocloud.io/mysql:5.7.21
 33       ports:
 34        - "3306:3306"
 35       volumes:
 36        - ./my.cnf:/etc/mysql/my.cnf
 37       environment:
 38        - MYSQL_ROOT_PASSWORD=dangerous
 39     mysql3307:
 40       image: daocloud.io/mysql:5.6
 41       ports:
 42        - "3307:3306"
 43       environment:
 44        - MYSQL_ROOT_PASSWORD=dangerous
CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS              PORTS                    NAMES
a5317caa2a56        daocloud.io/mysql:5.7.21   "docker-entrypoint.s…"   3 minutes ago       Up 3 minutes        0.0.0.0:3306->3306/tcp   service_mysql_1
9c5e3f2750f9        daocloud.io/mysql:5.6      "docker-entrypoint.s…"   3 minutes ago       Up 3 minutes        0.0.0.0:3307->3306/tcp   service_mysql3307_1

在 9c5e3f2750f9 我运行它

mysql -u root -pdangerous -h mysql 

它可以工作,但是当我将版本更改为“3”时。

Warning: Using a password on the command line interface can be insecure.
ERROR 2005 (HY000): Unknown MySQL server host 'msyql' (0)

【讨论】:

  • 感谢您的回答。但我认为link 已被弃用。默认情况下,docker-compose 文件中的容器都加入一个默认网络。所以我应该通过调用 redis:6379 来连接到 redis 对吗?但它给了我name or service not known 错误..
  • 我明白了,试试redis 而不是redis:6379。在容器内使用不需要定义端口部分
  • 我试过redis而不是redis:6379,但它仍然给出同样的错误Error -2 connecting to redis:6379. Name or service not known。我不明白这里发生了什么
  • 我测试它并发现版本:'2' 工作,但版本:'3' 没有
  • 谢谢。让我试一试。我还是不明白后台发生了什么哈哈