【问题标题】:Using MySQL in a Docker Container在 Docker 容器中使用 MySQL
【发布时间】:2017-02-19 09:36:00
【问题描述】:

我对 Docker 有点陌生,我正在尝试使用 MySQL 为 Django 应用程序构建图像。我遇到的问题是,在运行我的图像后出现以下错误: django.db.utils.OperationalError: (2002, "Can't connect to local MySQL server through socket '/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 && apt-get install -y mysql-server

为了解决这个问题,我尝试了多种解决方案,我在互联网上找到了这些解决方案,例如:

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

遗憾的是,没有任何效果。我还确保服务器正在运行,但问题仍然存在。

【问题讨论】:

  • 让我们看看你的Dockerfiledocker-compose.yml 文件。 settings.py 中的数据库设置也有助于提供一些见解。
  • 因为我对 stackoverflow 也有点陌生,所以我不确定如何发布整个文件。老实说,我已经在帖子中写了大部分Dockerfile,除了apt-get 用于不同的模块等。至于docker-compose我写了一些简短的东西,它失败了同样的错误,所以我决定先得到我的@ 987654334@正在运行。
  • 你能进入正在运行的容器吗? docker exec -it [your container name here] /bin/bash 会给你一个shell,你可以在其中进行一些调试。从容器内部,您可以尝试查看 mysql 是否正在运行(看起来不像):/etc/init.d/mysql status
  • MySQL 应该像我一样运行RUN service mysql start
  • 您在数据库配置中将HOST 设置为什么?

标签: mysql django docker


【解决方案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

编辑

如果您使用此配置,请在您的 settings.py 中将 HOST 的值更改为 db

【讨论】:

  • 我再次得到同样的错误,但最后不是 (111) 它是 (2) : django.db.utils.OperationalError: (2002, "Can't connect to local MySQL 服务器通过 socket '/var/run/mysqld/mysqld.sock' (2)")
  • 我有一个简单的问题。你为什么写environment: - PYTHONPATH=/code/server/ 然后是command: python server/manage.py 如果我在manage.py 之前离开服务器,我得到一个错误,它不存在。
猜你喜欢
  • 1970-01-01
  • 2019-06-10
  • 1970-01-01
  • 2014-09-24
  • 1970-01-01
  • 2019-02-13
  • 2020-10-17
  • 1970-01-01
  • 2019-04-14
相关资源
最近更新 更多