我想使用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(原始和测试)并且具有完全访问权限,并且使用入口点无效。
在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容器。