2016-10-10 6 views
0

Я добрая новичок в Docker, и я пытаюсь создать образ для приложения Django с использованием MySQL. Проблема, с которой я столкнулась, - после запуска моего изображения получить следующую ошибку: django.db.utils.OperationalError: (2002, «Не удается подключиться к локальному серверу MySQL через сокет»/var/run/mysqld/mysqld .sock '(111) "). В качестве основы для образа Я использую FROM django:python2, я установил сервер, используя следующие команды:Использование MySQL в контейнере Docker

  • RUN echo "mysql-server mysql-server/root_password password X" | debconf-set-selections
  • RUN echo "mysql-server mysql-server/root_password_again password X" | debconf-set-selections
  • RUN apt-get update && apt-get install -y mysql-server

Чтобы исправить эту проблему, я попробовал несколько решений , который я нашел в Интернете, например:

  • RUN touch /var/run/mysqld/mysqld.sock
  • RUN chmod -R 755 /var/run/mysqld/mysqld.sock
  • EXPOSE 3306

К сожалению, ничего не получалось. Я также убедился, что сервер работает, но проблема все еще существует.

+0

Давайте посмотрим ваш '' Dockerfile' и докер -compose.yml'. Настройки базы данных в 'settings.py' также могли бы помочь в проницательности. – denvaar

+0

Как и я, новичок в stackoverflow, я не уверен, как опубликовать весь файл. Честно говоря, я написал большую часть «Dockerfile» в сообщении, кроме «apt-get» для разных модулей и т. Д. Что касается 'docker-compose', я написал что-то короткое, и он потерпел неудачу с той же ошибкой, поэтому я решил сначала запустите мой «Dockerfile». – devdev

+0

Вы можете попасть в рабочий контейнер? 'docker exec -it [имя вашего контейнера здесь]/bin/bash' даст вам оболочку, где вы можете выполнить некоторую отладку. Изнутри контейнера вы можете попытаться проверить, работает ли mysql (он не похож на него): '/etc/init.d/mysql status' – denvaar

ответ

1

Вот пример конфигурации, который работает очень хорошо.

Dockerfile

FROM python:3.5 
ENV PYTHONUNBUFFERED 1 
RUN mkdir /code 
WORKDIR /code 
ADD . /code/ 
RUN pip install -r requirements.txt 

Убедитесь, что изменить путь к файлу requirements.txt (если он существует).

докер-compose.yml

db: 
    image: mysql 
web: 
    build: . 
    environment: 
    - PYTHONPATH=/code/server/ 
    - DJANGO_SETTINGS_MODULE=path.to.your.settings.file 
    command: python server/manage.py runserver 0.0.0.0:8000 
    volumes: 
    - .:/code 
    ports: 
    - "8000:8000" 
    links: 
    - db 

Убедитесь в том, замените путь на DJANGO_SETTINGS_MODULE правильной пунктирной дорожкой в ваш файл настроек.

docker-compose build затем docker-compose up

EDIT

Если вы используете этот конфиг, измените значение HOST на db в вашем settings.py

+0

Я снова получаю ту же ошибку, но вместо (111) в конце ее a (2): ** django.db.utils.OperationalError: (2002, «Не удается подключиться к локальному серверу MySQL через сокет»/var/run/mysqld/mysqld.sock '(2) ") ** – devdev

+0

У меня есть быстрый вопрос. Почему вы написали 'environment: - PYTHONPATH =/code/server /' И после этого следует команда 'python server/manage.py' Если я оставлю сервер до manage.py, я получаю сообщение об ошибке, которое не существует , – devdev

+0

Проблема решена! Спасибо за помощь. – devdev