带有docker和mysql的Bitbucket管道

问题描述 投票:0回答:1

我想使用bitbucket管道为Django网站实现一些CI / CD。目标是:测试Docker构建正确,然后运行Django测试。

但我收到此错误:

django.db.utils.OperationalError: (2003, 'Can\'t connect to MySQL server on \'127.0.0.1\' (111 "Connection refused")')

这里是bitbucket-pipelines.yml

options:
  docker: true

definitions:
  services:
    mysql:
      image: mysql:5.7
      variables:
          MYSQL_DATABASE: 'foo'
          MYSQL_USER: 'default'
          MYSQL_PASSWORD: 'default'
          MYSQL_RANDOM_ROOT_PASSWORD: 'yes'

  steps:
    - step: &test-docker
        name: "docker builds"
        services:
          - docker
          - mysql
        caches:
          - docker
        script:
          - export IMAGE_NAME=foo:$BITBUCKET_COMMIT
          - export CONTAINER_NAME=test-foo

          - docker build -t $IMAGE_NAME .
          - docker run -p 8080:8080 --name $CONTAINER_NAME --rm -d $IMAGE_NAME

          - docker exec $CONTAINER_NAME python /app/manage.py test tests --noinput
          - docker stop $CONTAINER_NAME

pipelines:
  default:
      - step: *test-docker

我已经尝试了一些解决方案和解决方法,例如。从服务和docker链接端口;使用卷;并在docker外部测试Django。这有更多问题,因为它需要2个DB(原始和测试)并且具有完全访问权限,并且使用入口点无效。

mysql django docker bitbucket-pipelines
1个回答
0
投票

在django应用程序中指定的数据库地址,即127.0.0.1仅在本地系统中运行mysql而不在容器中运行时才有效。

当您使用mysql的docker映像时,它具有自己的IP地址,而不是127.0.0.1。您可以使用docker inspect <container id>获取IP地址。

[如果您在内部通过docker-compose使用docker服务,则可以使用yml文件中的service name简单地访问mysql容器。

© www.soinside.com 2019 - 2024. All rights reserved.