#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 Я получаю сообщение об ошибке, что его не существует.