Connect to local mysql server on ubuntu from docker container

I have VPS server with Ubuntu 18.04.4 LTS Try to start Django application in docker container and connect application to MySql server on Ubuntu

docker-compose.yml

version: "3"
services:
  redis:
    restart: always
    image: "redis:alpine"
    hostname: localhost
    container_name: redis
    ports:
      - '6379:6379'
  backend:
    restart: always
    build:
      context: .
      args:
        - SECRET_KEY=<not_empty>
        - DEBUG=False
        - DATABASE_NAME=beta
        - DATABASE_USER=root
        - DATABASE_PASSWORD=root
        - DATABASE_HOST=host.docker.internal
    container_name: backend
    image: backend
    ports:
      - "8000:8000"
    links:
      - redis
    depends_on:
      - redis

Dockerfile

FROM python:3.7-alpine
ENV PYTHONUNBUFFERED 1
RUN mkdir /backend
WORKDIR /backend
COPY . .
RUN apk update \
    && apk add libffi-dev openssl-dev \
    && apk add mysql mysql-client \
    && apk add --no-cache jpeg-dev zlib-dev \
    && apk add --virtual build-deps gcc python3-dev musl-dev \
    && apk add --no-cache mariadb-dev
COPY ./requirements.txt /requirements.txt
RUN pip3 install -r /requirements.txt
ARG SECRET_KEY
ENV SECRET_KEY=$SECRET_KEY
ARG DEBUG
ENV DEBUG=$DEBUG
ARG DATABASE_NAME
ENV DATABASE_NAME=$DATABASE_NAME
ARG DATABASE_USER
ENV DATABASE_USER=$DATABASE_USER
ARG DATABASE_PASSWORD
ENV DATABASE_PASSWORD=$DATABASE_PASSWORD
ARG DATABASE_HOST
ENV DATABASE_HOST=$DATABASE_HOST
RUN apk del build-deps
CMD [ "python", "./manage.py", "runserver", "0.0.0.0:8000", "--settings=personality.settings" ]

djsngo database settings

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': os.environ['DATABASE_NAME'],
        'USER': os.environ['DATABASE_USER'],
        'PASSWORD': os.environ['DATABASE_PASSWORD'],
        'HOST': os.environ['DATABASE_HOST'],
        'PORT': '3306',
    }
}

tried different ways to start the container

  1. docker run --rm -p 8000:8000 backend
  2. docker run --rm -p 8000:8000 -e DATABASE_HOST=localhost backend
  3. docker run --rm -p 8000:8000 --network=host -e DATABASE_HOST=localhost backend
  4. docker run --rm -p 8000:8000 --add-host=host.docker.internal:host-gateway -e DATABASE_HOST=localhost backend
  5. docker run --rm -p 8000:8000 --add-host=host.docker.internal:172.17.0.1 -e DATABASE_HOST=localhost backend

etc ..

always i get error django.db.utils.OperationalError: (2002, "Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock' (2)")

on windows this container start and connect with my local mysql on windows docker run --rm -p 8000:8000 -e DATABASE_HOST=host.docker.internal backend

please help, thanks

Вернуться на верх