构建docker-compose镜像时无法连接到MySQL

5
我有一个docker-compose的配置,但在构建数据库步骤时,django管理会抛出错误:
django.db.utils.OperationalError: (2002, "Can't connect to MySQL server on '127.0.0.1' (115)")
我认为这是因为Docker拒绝连接。
通过套接字的类似配置也不起作用(会显示"error connection by socket"错误)。
Docker Compose 文件:
version: '3'
services:
  db:
    image: mariadb:5.5
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: "root"
      MYSQL_DATABASE: "bh"
      MYSQL_USER: "root"
      MYSQL_PASSWORD: "root"
    ports:
      - "3302:3306"


  behealthy_dev:
    build: .
    container_name: behealthy_dev
    expose:
      - "86"
    command: python manage.py runserver 0.0.0.0:80
    volumes:
      - /behealthy_dev/
    ports:
      - "86:86"
    depends_on:
      - db


Dockerfile
FROM python:3.6
ENV PYTHONUNBUFFERED 1
RUN mkdir /behealthy_dev
WORKDIR /behealthy_dev
ADD requirements.txt /behealthy_dev/
RUN pip install -r requirements.txt
ADD . /behealthy_dev/
RUN python manage.py makemigrations
RUN python manage.py migrate
RUN python manage.py collectstatic --noinput

数据库设置(设置)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'bh',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': 'root',
        'OPTIONS': {
            'sql_mode': 'traditional',
            'init_command': 'SET innodb_strict_mode=1',
            'charset': 'utf8mb4',
        },

    },
}

有任何解决方案吗?我尝试了其他堆栈答案,但对我没有用。


@sadok-f的回答很重要(您的数据库不在127.0.0.1上),但是从Dockerfile本身无法运行数据库迁移;它没有Compose网络环境,并且如果您删除并重新创建数据库,它也不会被重新构建。 - David Maze
1个回答

2
在您的服务中,将MySQL主机从behealthy_dev更改为:

'HOST': '127.0.0.1'

to

'HOST': 'db',

编辑: 将MYSQL_ROOT_PASSWORD: "root"更改为:

MYSQL_ROOT_PASSWORD:“根”

`MYSQL_ROOT_PASSWORD: "rootpassword"`

将您的数据库设置为:

'PASSWORD': 'rootpassword',

不在docker-compose中设置网络,这应该如何工作? - LinPy
如果未指定网络设置,则docker composer将使用默认驱动程序创建一个网络。 - sadok-f
已更新我的答案,请尝试更改为 MYSQL_ROOT_PASSWORD - sadok-f

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接