【问题标题】:Getting Mysql Connection Error with docker compose使用 docker compose 获取 Mysql 连接错误
【发布时间】:2021-07-07 07:34:31
【问题描述】:

我正在尝试使用 docker 和 docker compose 设置我的开发环境。我正在将 Django 与 Mysql 和 phpymyadmin 一起使用。当我运行 docker-compose up 命令时,我的 mysql 和 phpmyadmin 图像设置正确,但我的 Django 应用程序失败并抛出此错误,

django.db.utils.OperationalError: (2002, "Can't connect to MySQL 服务器在 '192.168.1.221' (115)")

这是我的 yaml 文件。

version: '3.1'

services:
  db:
    image: mysql
    restart: always
    environment:
      MYSQL_HOST: localhost
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: test
      MYSQL_ROOT_HOST: '%'
    ports:
      - "3308:3306"
  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    restart: always
    environment:
      PMA_HOST: db
      PMA_USER: root
      PMA_PASSWORD: root
    ports:
      - "8080:80"
      

  web:
    build: .
    command: bash -c "python manage.py makemigrations && python manage.py migrate && python manage.py runserver"
    container_name: demo
    volumes:
      - .:/data
    ports:
      - "8000:8000"
    depends_on:
      - db

networks:
  base:

这是我的 django 应用程序的 Dockerfile。

# Dockerfile


FROM python:3.8

# install nginx
RUN apt-get update && apt-get install nginx vim -y --no-install-recommends
RUN pip install mysql-connector
COPY nginx.default /etc/nginx/sites-available/default
# RUN ln -sf /dev/stdout /var/log/nginx/access.log \
#     && ln -sf /dev/stderr /var/log/nginx/error.log

# The enviroment variable ensures that the python output is set straight
# to the terminal with out buffering it first
ENV PYTHONUNBUFFERED 1

# create root directory for our project in the container
RUN mkdir /opt/app

# set working dir
WORKDIR /opt/app

# ENV PORT=8000

EXPOSE 8000

# Copy the project files to working dir
COPY . /opt/app

# install dependencies,  you can change it to production.txt to deploy on the production env
RUN pip install -r requirements/development.txt

CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

这是我用于数据库连接的环境变量。

DB_HOST=db
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=root
DB_PASSWORD=root

DATABASES = {
    "default": {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': env.str('DB_DATABASE'),
        'HOST': env.str('DB_HOST'),
        'USER': env.str('DB_USERNAME'),
        'PASSWORD': env.str('DB_PASSWORD')
    }
}
DATABASES["default"]["ATOMIC_REQUESTS"] = True

我已经尝试并检查过 stackoverflow 上的其他类似帖子,但它们没有帮助。我对 Docker 还很陌生。任何帮助将不胜感激。

【问题讨论】:

  • 我认为您应该将DB_PORT 更改为3308,因为您在docker-compose 中映射它
  • 我这样做了,但同样的错误即将到来。
  • 你能添加你的 Django 数据库连接信息吗?
  • @Saeed 补充说。
  • 恐怕我不知道更多

标签: django docker docker-compose


【解决方案1】:

我正在使用数据库 URL 将服务(后端)连接到我的数据库,如下所示:

db_url="jdbc:mysql://db_user:db_password@db_host:db_port/db_name"

它对我来说很好用,别忘了为所有服务使用同一个网络(所有服务属于同一个网络)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-30
    • 2023-02-12
    • 2021-06-16
    • 2020-09-18
    • 2021-12-14
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多