'db'의 MySQL 서버에 연결할 수 없습니다 ([Errno -2] 이름이 확인되지 않음)

파힘 이르판

파이썬을 사용하여 mysql을 docker와 연결하려고합니다. 그러나이 오류가 발생합니다. python3을 사용하고 있습니다. 나는 도커를 처음 사용하므로 해결책을 찾을 수 없습니다.

Dockerfile :

FROM python:3.8-alpine
MAINTAINER Fahim Ahmed Irfan

ENV PYTHONUNBUFFERED 1

COPY ./requirements.txt /requirements.txt
RUN apk add --update --no-cache jpeg-dev
RUN apk --update add --no-cache --virtual .tmp-build-deps \
      gcc build-base libffi-dev freetype-dev libpng-dev openblas-dev linux-headers mysql-dev zlib zlib-dev
RUN pip install -r /requirements.txt

RUN mkdir /app
WORKDIR ./app
COPY ./app /app

RUN adduser -D user
User user
EXPOSE 8000

Docker 작성 파일 :

version: '3'

services:
  app:
    restart: always
    build:
      context: .
    ports:
      - "8000:8000"
    volumes:
      - ./app:/app
    command: >
      sh -c "python check_db.py --service-name mysql --ip db --port 3306 &&
             python manage.py makemigrations &&
             python manage.py migrate &&
             python manage.py runserver 0.0.0.0:8000"
    environment:
      - DB_HOST=db
      - DB_NAME=app
      - DB_USER=root
      - DB_PASS=supersecretpassword
    depends_on:
      - db

  db:
    image: mysql:8.0
    environment:
      - MYSQL_HOST=localhost
      - MYSQL_PORT=3306
      - MYSQL_ROOT_HOST=%
      - MYSQL_DATABASE=app
      - MYSQL_USER=root
      - MYSQL_PASSWORD=supersecretpassword

    ports:
      - "3306:3306"

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)

settings.py :

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': os.environ.get('DB_HOST'),
        'NAME': os.environ.get('DB_NAME'),
        'USER': os.environ.get('DB_USER'),
        'PASSWORD': os.environ.get('DB_PASS'),
        'PORT': '3306',
    }

requirements.txt :

Django==2.1.3,<2.2.0
djangorestframework==3.9.0,<3.10.0
pymysql

오류 : django.db.utils.OperationalError : (2003, "Ca n't connect to MySQL server on 'db'([Errno -2] Name does not resolve)")

이 문제를 해결하는 방법을 모릅니다. 조언 부탁드립니다.

Mehant Kammakomati

마지막으로이 작업을 수행하고 코드에 필요한 몇 가지 중요한 변경 사항을 적용했습니다.

WORKDIR app

WORKDIR디렉토리를 생성하고 디렉토리 app로 이동 app하여 명령문을 제거 할 수 있습니다. RUN mkdir /app해당 디렉토리로 이동하므로 COPY명령문을 다음과 같이 변경하십시오 .

COPY . .

첫 번째 .는 dockerfile이있는 위치이고 두 번째 .는 컨테이너의 앱 폴더입니다. 따라서 항상 앱 폴더에 dockerfile이있는 것이 좋습니다.

    volumes:
      - ./app:/app

docker-compose의 위 코드는 콘텐츠를 직접 복사하므로 다시 마운트 할 필요가 없으므로 필요하지 않습니다.

      - MYSQL_ROOT_PASSWORD=supersecretpassword

또한 docker-compose의 db 서비스에 위의 환경 변수를 추가하십시오.

- MYSQL_HOST=localhost

이 환경 변수는 여기에 필요하지 않으므로 제거하십시오.

image: mysql:5.7

나는 데이터베이스 서버에서 많은 문제없이 광범위하게 사용하는 안정적인 버전 중 하나이므로 버전 5.7을 사용하는 것이 좋습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

psycopg2 / psql이 postgres db에 연결할 수 없습니다.

분류에서Dev

(ip 또는 도메인 이름)에서 MySQL 서버에 연결할 수 없습니다.

분류에서Dev

다중 파트 ID는 DB2에 대한 ODBC 연결이있는 연결된 서버를 사용하여 바인드 할 수 없습니다.

분류에서Dev

연결을 연결할 수 없음 연결이 닫힌 후에는 작업이 허용되지 않습니다. Tomcat 7의 오류

분류에서Dev

mysql 워크 벤치를 통해 원격 mysql DB에 연결할 수 있지만 mysql2 (NodeJS)를 통해서는 연결할 수 없습니다.

분류에서Dev

'도메인'(111)의 MySQL 서버에 연결할 수 없습니다.

분류에서Dev

'localhost'(10061)의 MySQL 서버에 연결할 수 없지만 PHP를 통해 연결할 수 있습니다.

분류에서Dev

18.04에서 PPA 키를 추가 할 수 없음 : NameError : 이름 'KUrl'이 정의되지 않았습니다.

분류에서Dev

Playframework 2.5.4. 데이터베이스 [db] (MySql)에 연결할 수 없습니다.

분류에서Dev

MySQL이 원격 서버에 연결할 수 없습니다.

분류에서Dev

phpMyAdmin이 MySQL 서버에 연결할 수 없습니다.

분류에서Dev

도메인을 확인할 수 없음- "네임 서버 이름에 글루 또는 A 레코드가 포함되어 있지 않습니다."

분류에서Dev

Windows XP는 VPN으로 연결할 때 정규화되지 않은 이름을 확인할 수 없습니다.

분류에서Dev

라우터가 인터넷에 연결되어 있지 않으면 이름으로 ssh 할 수 없습니다.

분류에서Dev

Windows에서 MySQL DB에 연결할 수 없습니다.

분류에서Dev

FTP 서버에 연결할 수 없음 : 425 데이터 연결을 구축 할 수 없음 : 연결 시간이 초과되었습니다.

분류에서Dev

PHP를 사용하여 내 SQL에 연결할 수 없습니다. 정의되지 않은 함수 mysql_connect ()

분류에서Dev

도커 빌드 오류 : psql : 서버에 연결할 수 없음 : 연결이 거부되었습니다.

분류에서Dev

PG :: ConnectionBad : 서버에 연결할 수 없음 : 연결이 거부되었습니다.

분류에서Dev

PostgreSQL : 서버에 연결할 수 없음 : 연결 시간이 초과되었습니다.

분류에서Dev

서버 이름 / 인스턴스 이름을 사용하여 로컬 서버에 연결할 수 없습니다.

분류에서Dev

MySQL이 외부 서버에 연결할 수 없음

분류에서Dev

Python에서 Db2에 연결할 수 없습니다.

분류에서Dev

새 AWS EC2 인스턴스의 Apache 서버에 연결할 수 없음

분류에서Dev

입력 필드에 연결할 수 없음-정의되지 않은 '값'속성을 읽을 수 없습니다.

분류에서Dev

오늘 업데이트 후 인터넷에 액세스 할 수 없음 (DNS 이름이 확인되지 않음)

분류에서Dev

NullPointerException이 MySQL의 드라이버 연결 논리 내부 : 자바에서의 MySQL에 연결할 수 없습니다

분류에서Dev

서버에 연결할 수 없습니다. 응용 프로그램이 열리지 않습니다.

분류에서Dev

연결할 수 없음 : '/var/run/mysqld/mysqld.sock'소켓을 통해 로컬 MySQL 서버에 연결할 수 없습니다. (2)

Related 관련 기사

  1. 1

    psycopg2 / psql이 postgres db에 연결할 수 없습니다.

  2. 2

    (ip 또는 도메인 이름)에서 MySQL 서버에 연결할 수 없습니다.

  3. 3

    다중 파트 ID는 DB2에 대한 ODBC 연결이있는 연결된 서버를 사용하여 바인드 할 수 없습니다.

  4. 4

    연결을 연결할 수 없음 연결이 닫힌 후에는 작업이 허용되지 않습니다. Tomcat 7의 오류

  5. 5

    mysql 워크 벤치를 통해 원격 mysql DB에 연결할 수 있지만 mysql2 (NodeJS)를 통해서는 연결할 수 없습니다.

  6. 6

    '도메인'(111)의 MySQL 서버에 연결할 수 없습니다.

  7. 7

    'localhost'(10061)의 MySQL 서버에 연결할 수 없지만 PHP를 통해 연결할 수 있습니다.

  8. 8

    18.04에서 PPA 키를 추가 할 수 없음 : NameError : 이름 'KUrl'이 정의되지 않았습니다.

  9. 9

    Playframework 2.5.4. 데이터베이스 [db] (MySql)에 연결할 수 없습니다.

  10. 10

    MySQL이 원격 서버에 연결할 수 없습니다.

  11. 11

    phpMyAdmin이 MySQL 서버에 연결할 수 없습니다.

  12. 12

    도메인을 확인할 수 없음- "네임 서버 이름에 글루 또는 A 레코드가 포함되어 있지 않습니다."

  13. 13

    Windows XP는 VPN으로 연결할 때 정규화되지 않은 이름을 확인할 수 없습니다.

  14. 14

    라우터가 인터넷에 연결되어 있지 않으면 이름으로 ssh 할 수 없습니다.

  15. 15

    Windows에서 MySQL DB에 연결할 수 없습니다.

  16. 16

    FTP 서버에 연결할 수 없음 : 425 데이터 연결을 구축 할 수 없음 : 연결 시간이 초과되었습니다.

  17. 17

    PHP를 사용하여 내 SQL에 연결할 수 없습니다. 정의되지 않은 함수 mysql_connect ()

  18. 18

    도커 빌드 오류 : psql : 서버에 연결할 수 없음 : 연결이 거부되었습니다.

  19. 19

    PG :: ConnectionBad : 서버에 연결할 수 없음 : 연결이 거부되었습니다.

  20. 20

    PostgreSQL : 서버에 연결할 수 없음 : 연결 시간이 초과되었습니다.

  21. 21

    서버 이름 / 인스턴스 이름을 사용하여 로컬 서버에 연결할 수 없습니다.

  22. 22

    MySQL이 외부 서버에 연결할 수 없음

  23. 23

    Python에서 Db2에 연결할 수 없습니다.

  24. 24

    새 AWS EC2 인스턴스의 Apache 서버에 연결할 수 없음

  25. 25

    입력 필드에 연결할 수 없음-정의되지 않은 '값'속성을 읽을 수 없습니다.

  26. 26

    오늘 업데이트 후 인터넷에 액세스 할 수 없음 (DNS 이름이 확인되지 않음)

  27. 27

    NullPointerException이 MySQL의 드라이버 연결 논리 내부 : 자바에서의 MySQL에 연결할 수 없습니다

  28. 28

    서버에 연결할 수 없습니다. 응용 프로그램이 열리지 않습니다.

  29. 29

    연결할 수 없음 : '/var/run/mysqld/mysqld.sock'소켓을 통해 로컬 MySQL 서버에 연결할 수 없습니다. (2)

뜨겁다태그

보관