Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

django mysql को docker-compose में कनेक्ट नहीं कर सकता है

अंत में, मैंने इसे समझ लिया! मुख्य बिंदु यह है, जैसे @SangminKim ने कहा, मुझे 3306 का उपयोग करने की आवश्यकता है नहीं 3302 settings.py . में , और db . का उपयोग करें HOST . के रूप में नहीं 127.0.0.1

तो यह है मेरा docker-compose.yml अभी फ़ाइल करें:

version: '3'

services:
  db:
    image: mariadb:5.5
    restart: always
    environment:
      - MYSQL_HOST=localhost
      - MYSQL_PORT=3306  # cannot change this port to other number
      - MYSQL_ROOT_HOST=%
      - MYSQL_DATABASE=test
      - MYSQL_USER=belter
      - MYSQL_PASSWORD=belter_2017
      - MYSQL_ROOT_PASSWORD=123456_abc
    volumes:
      - /home/belter/mdbdata/mdb55:/var/lib/mysql
    ports:
      - "3302:3306"
  web:
    image: onlybelter/django_py35
    command: python3 manage.py runserver 0.0.0.0:6001
    volumes:
      - .:/djcode
    ports:
      - "6001:6001"
    depends_on:
      - db

तो अब हम इसे कनेक्ट कर सकते हैं docker-mysql द्वारा mysql -h 127.0.0.1 -P 3302 -u root -p सीधे खोल में, लेकिन हमें db . का उपयोग करना होगा और 3306 django में settings.py फ़ाइल:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',
        'USER': 'belter',
        # 'HOST': 'mariadb55',
        'HOST': 'db',  #<---
        'PORT': '3306',   #<---
        'PASSWORD': 'belter_2017',
        'default-character-set': 'utf8',
        'OPTIONS': {
            'sql_mode': 'traditional',
        }
    }
}

और हम docker-compose.yml में अतिरिक्त कमांड चलाकर जांच सकते हैं कि यह पोर्ट खुला है या नहीं फ़ाइल:

...
  web:
    image: onlybelter/django_py35
    command: /bin/sh -c "python check_db.py --service-name mysql --ip db --port 3306"
    volumes:
      - .:/djcode
...

यह रहा check_db.py फ़ाइल:

# check_db.py 

import socket
import time
import argparse
""" Check if port is open, avoid docker-compose race condition """

parser = argparse.ArgumentParser(description='Check if port is open, avoid\
                                 docker-compose race condition')
parser.add_argument('--service-name', required=True)
parser.add_argument('--ip', required=True)
parser.add_argument('--port', required=True)

args = parser.parse_args()

# Get arguments
service_name = str(args.service_name)
port = int(args.port)
ip = str(args.ip)

# Infinite loop
while True:
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    result = sock.connect_ex((ip, port))
    if result == 0:
        print("{0} port is open! Bye!".format(service_name))
        break
    else:
        print("{0} port is not open! I'll check it soon!".format(service_name))
        time.sleep(3)

वैसे, यह मेरी Dockerfile है निर्माण के लिए django-py35 :

FROM python:3.5-alpine
MAINTAINER Xin Xiong "[email protected]"
ENV PYTHONUNBUFFERED 1
RUN set -e; \
        apk add --no-cache --virtual .build-deps \
                gcc \
                libc-dev \
                linux-headers \
                mariadb-dev \
                python3-dev \
                postgresql-dev \
                freetype-dev \
                libpng-dev \
                g++ \
        ;
RUN mkdir /djcode
WORKDIR /djcode
ENV REFRESHED_AT 2017-12-25
ADD requirements.txt /djcode/
RUN pip install --no-cache-dir -r /djcode/requirements.txt
RUN pip install uwsgi
ADD . /djcode/  # copy . to /djcode/
EXPOSE 6001

यहां से अधिक विवरण देखें:https://github.com/OnlyBelter/django-compose



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मुझे MySQL में एक फ़ील्ड को auto_increment करने की आवश्यकता है जो प्राथमिक कुंजी नहीं है

  2. PHP का उपयोग करके MySQL डेटाबेस से छवियों को कैसे पढ़ा जाए?

  3. MySQL:उन पंक्तियों को जल्दी से खोजें जिनकी किसी अन्य तालिका में संगत पंक्ति नहीं है

  4. अलग-अलग HTML तालिकाओं में MYSQL परिणामों को अलग करें

  5. Django में सेट क्वेरी में एक रिकॉर्ड की कई पंक्तियों से संबंधित फ़ील्ड का संयोजन