djangoはdocker-composeでmysqlに接続できません

ベルト

私はdockerを初めて使用します。現在、docker-composeを介してdockerでmariadbを使用してdjangoを実行しようとしていますが、常に次のエラーが発生します。

私は使用しますDocker version 17.09.1-ce, build 19e2cf6docker-compose version 1.18.0, build 8dd22a9

django.db.utils.OperationalError:(2003、 'Ca n \' t connect to MySQL server on \ 'mariadb55 \'(111 "Connection refused") ')

docker-compose up dbローカルまたはリモートで実行した後、dbに正しく接続できます。また、以下のようsettings.pyファイルのパラメーターを設定するpython manage.py runserver 0.0.0.0:6001ことで、anaconda仮想環境で正しく実行してdockerでdbサービスに接続することもできます。

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

これは私のdocker-compose.ymlファイルです

version: '3'

services:
  db:
    image: mariadb:5.5
    restart: always
    environment:
      - MYSQL_HOST=localhost
      - MYSQL_PORT=3306
      - 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:
      - /mnt/data/www/mysite:/djcode
    ports:
      - "6001:6001"
    depends_on:
      - db
    links:
      - db:mariadb55

私は見つけることができるすべてをほとんど試しましたが、それでもそれを理解することはできません、どんな助けもいいでしょう!

私が試したこと:

Docker構成mysql接続が失敗する

docker-composeを使用してdjangoコンテナとmysqlコンテナをリンクする

docker-composeによるpostgresへのDjango接続

ベルト

最後に、私はそれを理解しました!重要な点は、@ SangminKi​​mが言ったように、3306not 3302insettings.pyを使用しdbHOSTnotとして使用する必要があるということ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

だから今、私たちは、この接続できるドッキングウィンドウ-mysqlのことでmysql -h 127.0.0.1 -P 3302 -u root -p、直接シェルでは、私たちが使用する必要がありますdbし、3306ジャンゴでの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をご覧ください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

docker-compose:nodejs + mysqlはmysqlに接続できません

分類Dev

Docker-ComposeはMySQLに接続できません

分類Dev

Django:mysqlに接続できません

分類Dev

docker-compose-MySQLデータベースに接続できません

分類Dev

docker-composeからdockerに接続できません

分類Dev

docker-composeのcodeception-Webdriverに接続できません

分類Dev

docker-composeはdockerデーモンに接続できませんか?

分類Dev

DjangoはDockerのRedisに接続できません

分類Dev

Compose iocantはMongoCompassに接続できません

分類Dev

Dockerはmysqlに接続できません

分類Dev

PDOはMySQLに接続できませんが、CLIは接続できます

分類Dev

docker-composeは外部ネットワークに接続できません

分類Dev

docker-composeはasp.netコアサイトに接続できません

分類Dev

フラスコはpostgresqlをdocker-composeに接続できません

分類Dev

JavaWebappはopenshiftでmysqlに接続できませんでした

分類Dev

Node.jsでMySQL Dockerに接続できません

分類Dev

Dockerでmysqlに接続できません

分類Dev

django経由でmysqlに接続できません

分類Dev

Adminerとdocker-composeを使用してMySQLデータベースに接続できません

分類Dev

docker-composeの「ローカルMySQLサーバーに接続できません」

分類Dev

bashからdockerのmysqlに接続できません

分類Dev

mysqlをlaravel(docker)に接続できません

分類Dev

Dockerを使用してMysqlに接続できません

分類Dev

MySQL の Docker コンテナに接続できません

分類Dev

Docker、WordPressをmysqlに接続できません

分類Dev

DjangoはDockerセットアップでPostgresに接続できません

分類Dev

Docker-compose:アプリコンテナがPostgresに接続できません

分類Dev

docker-composeを使用してkibana / elasticsearchに接続できません

分類Dev

pymysqlはmysqlに接続できません

Related 関連記事

  1. 1

    docker-compose:nodejs + mysqlはmysqlに接続できません

  2. 2

    Docker-ComposeはMySQLに接続できません

  3. 3

    Django:mysqlに接続できません

  4. 4

    docker-compose-MySQLデータベースに接続できません

  5. 5

    docker-composeからdockerに接続できません

  6. 6

    docker-composeのcodeception-Webdriverに接続できません

  7. 7

    docker-composeはdockerデーモンに接続できませんか?

  8. 8

    DjangoはDockerのRedisに接続できません

  9. 9

    Compose iocantはMongoCompassに接続できません

  10. 10

    Dockerはmysqlに接続できません

  11. 11

    PDOはMySQLに接続できませんが、CLIは接続できます

  12. 12

    docker-composeは外部ネットワークに接続できません

  13. 13

    docker-composeはasp.netコアサイトに接続できません

  14. 14

    フラスコはpostgresqlをdocker-composeに接続できません

  15. 15

    JavaWebappはopenshiftでmysqlに接続できませんでした

  16. 16

    Node.jsでMySQL Dockerに接続できません

  17. 17

    Dockerでmysqlに接続できません

  18. 18

    django経由でmysqlに接続できません

  19. 19

    Adminerとdocker-composeを使用してMySQLデータベースに接続できません

  20. 20

    docker-composeの「ローカルMySQLサーバーに接続できません」

  21. 21

    bashからdockerのmysqlに接続できません

  22. 22

    mysqlをlaravel(docker)に接続できません

  23. 23

    Dockerを使用してMysqlに接続できません

  24. 24

    MySQL の Docker コンテナに接続できません

  25. 25

    Docker、WordPressをmysqlに接続できません

  26. 26

    DjangoはDockerセットアップでPostgresに接続できません

  27. 27

    Docker-compose:アプリコンテナがPostgresに接続できません

  28. 28

    docker-composeを使用してkibana / elasticsearchに接続できません

  29. 29

    pymysqlはmysqlに接続できません

ホットタグ

アーカイブ