Использование MySQL в контейнере Docker

#mysql #django #docker

#mysql #django #docker

Вопрос:

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

  • 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 amp;amp; apt-get install -y mysql-server

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

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

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

Комментарии:

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

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

3. Вы можете попасть в работающий контейнер? docker exec -it [your container name here] /bin/bash предоставит вам оболочку, в которой вы можете выполнить некоторую отладку. Изнутри контейнера вы можете попытаться проверить, запущен ли mysql (похоже, что это не так): /etc/init.d/mysql status

4. MySQL должен работать так, как у меня RUN service mysql start

5. Что вы установили HOST в своей конфигурации базы данных?

Ответ №1:

Вот пример конфигурации, которая работает действительно хорошо.

Dockerfile

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

Обязательно измените путь к вашему requirements.txt файлу (если он существует).)

docker-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

Редактировать

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

Комментарии:

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

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