简体   繁体   English

Dockerize Django + mySql app: (2002, "Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock' (2)") 错误

[英]Dockerize Django + mySql app: (2002, "Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock' (2)") error

I'm trying to dockerize my Django app which uses mySql but I'm facing some problems.我正在尝试对使用 mySql 的 Django 应用程序进行 docker 化,但我遇到了一些问题。 It's the first time I use Docker so there may be something basic which I don't understand.这是我第一次使用 Docker,所以可能有一些我不明白的基本内容。

Following some online tutorials, this is my Dockerfile:按照一些在线教程,这是我的 Dockerfile:

FROM python:3.8
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD . /code/
RUN pip install --upgrade pip && pip install -r requirements.txt
RUN pip install mysqlclient
COPY . /code/

And this is my docker-compose:这是我的 docker-compose:

version: '3'

services: 
  db:
    image: mysql:8
    ports:
      - '3306:3306'
    environment:
       MYSQL_DATABASE: 'database_name'
       MYSQL_USER: 'django'
       MYSQL_PASSWORD: 'django-password'
       MYSQL_ROOT_PASSWORD: 'password'
    volumes:
      - .setup.sql:/docker-entrypoint-initbd.d/setup.sql

  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
    links: 
      - db 

settings.py:设置.py:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': os.environ.get('MYSQL_DATABASE', 'mysql-db'),
        'USER': os.environ.get('MYSQL_USER', 'mysql-user'),
        'PASSWORD': os.environ.get('MYSQL_PASSWORD', 'mysql-password'),
        'HOST': os.environ.get('MYSQL_DATABASE_HOST', 'db'),
        'PORT': os.environ.get('MYSQL_DATABASE_PORT', 3306),
    }
}

And .env:和.env:

MYSQL_DATABASE=database_name
MYSQL_USER=django
MYSQL_PASSWORD=django-password
MYSQL_ROOT_PASSWORD=password
MYSQL_DATABASE_HOST=db
MYSQL_DATABASE_PORT=3306

To dockerize the app, I'm using Docker desktop in Windows 10.为了对应用程序进行 docker 化,我在 Windows 10 中使用 Docker 桌面。

After I run:我运行后:

docker-compose up -d

I see both containers (db and web) are running, however in the web container I see that django is not able to connect to mySql, as it gives me the error:我看到两个容器(db 和 web)都在运行,但是在 web 容器中我看到 django 无法连接到 mySql,因为它给了我错误:

django.db.utils.OperationalError: (2002, "Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock' (2)")

I have seem some similar threads around but they didn't help me understand where the problem is, or how to solve it.我似乎有一些类似的线索,但它们并没有帮助我理解问题出在哪里,或者如何解决它。 Please help me to shed some light on the issue, thank you!请帮我解释一下这个问题,谢谢!

Have you tried starting your db container first?您是否尝试过先启动您的数据库容器?

docker compose up db
docker compose build web
docker compose up

Once the services are built, you will be able to docker compose up without starting db container first as containers will be started in the order of depends_on defined in the docker-compose file.构建服务后,您将能够在不首先启动 db 容器的情况下进行 docker docker compose up因为容器将按照 docker-compose 文件中定义的depends_on顺序启动。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)") - OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)") (2002,“无法通过套接字'/var/run/mysqld/mysqld.sock'连接到本地MySQL服务器(2)”) - (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)") django无法通过套接字'/var/run/mysqld/mysqld.sock连接到本地MySQL服务器 - django Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock “无法通过套接字'/var/run/mysqld/mysqld.sock'(2)连接到本地MySQL服务器”) - “Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)”) Docker 错误:MySQLdb._exceptions.OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)") - Docker error : MySQLdb._exceptions.OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)") 无法通过Google App Engine上的套接字'/var/run/mysqld/mysqld.sock'连接到本地MySQL服务器 - Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' on Google App Engine (2002,“无法通过socket连接到本地MySQL服务器'/var/lib/mysql/mysql.sock'(2)”) - (2002, “Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)”) (2002,“无法通过套接字'/tmp/mysql.sock'(2)连接到本地MySQL服务器”) - (2002, “Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)”) 缺少 mysql.sock; 产生操作错误:(2002,“无法通过套接字连接到本地 MySQL 服务器‘/tmp/mysql.sock’(2)”) - Missing mysql.sock; yielding OperationalError: (2002, "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)") FLASK python web:MySQLdb._exceptions.OperationalError: (2002, “Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)”) - FLASK python web:MySQLdb._exceptions.OperationalError: (2002, “Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)”)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM