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

Posted

技术标签:

【中文标题】构建 docker-compose 映像时无法连接到 MySQL【英文标题】:Can't connect to MySQL while building docker-compose image 【发布时间】:2019-12-15 21:21:42 【问题描述】:

我有一个docker-compose的配置,在建库步骤,django管理报错:

django.db.utils.OperationalError: (2002, "Can't connect to mysql server on '127.0.0.1' (115)")

我认为 - 码头工人拒绝连接。

类似的套接字配置不起作用(说error connection by socket

Docker 编写文件

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 网络环境,删除再重新创建数据库也不会重建。 【参考方案1】:

在您的服务behealthy_dev 中更改 MySQL 主机

'HOST': '127.0.0.1'

'HOST': 'db',

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

`MYSQL_ROOT_PASSWORD: "rootpassword"`

以及您的数据库设置:

'PASSWORD': 'rootpassword',

【讨论】:

如果没有 docker-compose 中的网络设置,这应该如何工作? 如果没有指定网络设置,docker composer 将使用默认驱动创建一个网络。 更新了我的答案,换成MYSQL_ROOT_PASSWORD

以上是关于构建 docker-compose 映像时无法连接到 MySQL的主要内容,如果未能解决你的问题,请参考以下文章

在 VS2019 上调试 docker-compose 时出错

尝试构建时“找不到开发人员磁盘映像”[重复]

spotify/dockerfile-maven 插件:无法构建映像:javax.net.ssl.SSLException:无法识别的 SSL 消息,纯文本连接

在 dockerized 环境中无法从 Flask 连接到 Kafka

连接到 docker-compose mysql 容器会拒绝访问,但运行相同映像的 docker 不会

构建 docker-compose 镜像并将其推送到容器注册表中