Mysql Django无法连接到数据库。

Mysql Django无法连接到数据库。,mysql,django,docker,environment-variables,Mysql,Django,Docker,Environment Variables,我正在尝试使用docker为我公司的应用程序创建一个开发环境。出于某种原因,如果我使用docker运行web“bash”然后从shell运行mysql,我就能够连接到数据库,但是Django不会连接。web/worker节点的Dockerfile如下所示: FROM python:2.7 ENV PYTHONUNBUFFERED 1 ENV DOCKER 1 ENV REDIS_HOST "redis" ENV CASSANDRA_HOST "cassandra" RUN mkdir /code

我正在尝试使用docker为我公司的应用程序创建一个开发环境。出于某种原因,如果我使用
docker运行web“bash”
然后从shell运行
mysql
,我就能够连接到数据库,但是Django不会连接。web/worker节点的Dockerfile如下所示:

FROM python:2.7
ENV PYTHONUNBUFFERED 1
ENV DOCKER 1
ENV REDIS_HOST "redis"
ENV CASSANDRA_HOST "cassandra"
RUN mkdir /code
WORKDIR /code
ADD . /code/
RUN pip install --default-timeout=100 numpy==1.9.1
RUN pip install --default-timeout=100 scipy==0.15.1
RUN pip install --default-timeout=100 -r requirements_docker.txt
#RUN python /code/app/manage.py migrate
docker compose文件如下所示:

version: "2"

services:
  cassandra:
    image:
      cassandra:latest
  redis:
    image: 
      redis:latest
  db:
    image: mysql
    environment:
      MYSQL_DATABASE: appdb
      MYSQL_USER: dbuser
      MYSQL_PASSWORD: dbpass

  web:
    build: .
    command: python app/manage.py runserver 0.0.0.0:8000
    environment:
      DOCKER: 1
      DATABASE_HOST: db
      DATABASE_NAME: appdb
      DATABASE_USER: dbuser
      DATABASE_PASSWORD: dbpass
      REDIS_HOST: redis
      CASSANDRA_HOST: cassandra
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
      - redis
      - cassandra
  worker:
    build: .
    environment:
      DOCKER: 1
      DATABASE_HOST: db
      DATABASE_NAME: appdb
      DATABASE_USER: dbuser
      DATABASE_PASSWORD: dbpass
      REDIS_HOST: redis
      CASSANDRA_HOST: cassandra
    command: python /code/app/manage.py celery worker -Q celery,offline,periodic --broker=redis://redis:6379/4
    depends_on:
      - db
      - redis
      - cassandra
最后,数据库设置是(从多个设置文件合并):

奇怪的是,即使运行
python manage.py migrate
返回一个错误(
django.db.utils.OperationalError:(2003,“无法连接到'db'(111)”上的MySQL服务器)
)使用命令
mysql-h$database\u HOST-u$database\u USER-p$database\u PASSWORD$database\u NAME


django设置中可能会出现什么问题?

MySQL默认端口为
3306
,因此更改:

'PORT': '5432',


它确实可以手动使用您的
mysql
命令,因为该命令默认使用正确的端口

您是否尝试过直接将主机设置为
db
,而不使用env变量?作为备用。。。将所有这些ENV添加到一个语句中,以避免无用的层。跑步也一样。
'PORT': '5432',
'PORT': '3306',