Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将Django与Docker一起使用时出错-“;Can';t连接到';127.0.0.1';(111)“)_Python_Mysql_Django_Database_Docker - Fatal编程技术网

Python 将Django与Docker一起使用时出错-“;Can';t连接到';127.0.0.1';(111)“)

Python 将Django与Docker一起使用时出错-“;Can';t连接到';127.0.0.1';(111)“),python,mysql,django,database,docker,Python,Mysql,Django,Database,Docker,我试图将Docker与Django一起使用,但出现错误-db_1 |错误:数据库未初始化,未指定密码选项 db_1|您需要指定MYSQL_ROOT_密码、MYSQL_ALLOW_EMPTY_密码和MYSQL_RANDOM_ROOT_密码django.db.utils.OperationalError:(2003,“无法连接到'127.0.0.1'(111)上的MYSQL服务器)。当我在没有Docker的情况下使用我的应用程序时,它会工作。有什么建议吗 我的Dockerfile: FROM pyt

我试图将Docker与Django一起使用,但出现错误-
db_1 |错误:数据库未初始化,未指定密码选项
db_1|您需要指定MYSQL_ROOT_密码、MYSQL_ALLOW_EMPTY_密码和MYSQL_RANDOM_ROOT_密码django.db.utils.OperationalError:(2003,“无法连接到'127.0.0.1'(111)上的MYSQL服务器)
。当我在没有Docker的情况下使用我的应用程序时,它会工作。有什么建议吗

我的Dockerfile:

FROM python:3
 ENV PYTHONUNBUFFERED 1
 RUN mkdir /code
 WORKDIR /code
 ADD requirements.txt /code/
 RUN pip install -r requirements.txt
 ADD . /code/
My docker-compose.yml:

version: '3'

services:
  db:
    image: mysql
  web:
    build: .
    command: python3 Project/myVirtual/backend/pri/manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
我已将docker-compose.yaml更改为:

version: '3'

services:
  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: ""
      MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
  web:
    build: .
    command: python3 virtualPRI/PRI/backend/pri/manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
但此时此刻,proces已被封锁

db_1   | 2017-06-13T05:16:16.457122Z 0 [Note] End of list of non-natively partitioned tables
或者有时我仍然得到
web|django.db.utils.OperationalError:(2003,“无法连接到'127.0.0.1'(111)上的MySQL服务器)

管理:py

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "pri.settings")
    try:
        from django.core.management import execute_from_command_line
    except ImportError:
        # The above import may fail for some other reason. Ensure that the
        # issue is really that Django is missing to avoid masking other
        # exceptions on Python 2.
        try:
            import django
        except ImportError:
            raise ImportError(
                "Couldn't import Django. Are you sure it's installed and "
                "available on your PYTHONPATH environment variable? Did you "
                "forget to activate a virtual environment?"
            )
        raise
    execute_from_command_line(sys.argv)
127.0.0.1(111)
表示MySQL拒绝您的连接请求。我假设MySQL服务器和Django不在同一个Docker实例中运行,是吗

如果MySQL正在其他地方运行,您应该确保在Django的配置文件中正确配置了MySQL连接

解决方案1:您可以通过将MySQL的绑定地址从
127.0.0.1
更改为
0.0.0
来允许远程访问MySQL(但我不鼓励您这样做)。并正确更新MySQL数据库连接设置

在Linux中,您可以从
/etc/my.cnf
注释掉这些行(位置可以不同)

有关更详细的说明,请参见

解决方案2:(受@programerq评论的启发)您可以在主机操作系统或其他Docker实例中运行MySQL。由于MySQL默认绑定到
127.0.0.1
,因此启动Django Docker实例时,可以将
MySQLMachine:MySQLPort
映射到
DjangoDocker:MySQLPort
。这样Django仍然可以连接到MySQL的
127.0.0.1
,而不会注意到MySQL实际上正在其他地方运行

我以前在Docker集群项目中做过一些端口映射,您可以查看或查看Docker官方文档


希望这些想法能有所帮助,干杯。

提供docker命令/docker编写file@AzatIbrakov我已经更新了我的帖子。请尝试强制删除容器/图像,然后再试一次。您的意思是删除Dockerfile,docker-compose.yml并再次生成它们?我试过
docker rm$(docker ps-aq--filter name=mysql),但还是一样
我试过你的
docker compose.yml
没有
web
服务,工作正常我在mac os上工作,找到了my.cnf,但是没有关于
bind address=127.0.0.1
的信息,只有注释的#skip-networking。因为mysql服务器在一个容器中运行,并且生成
的代码无法连接到“127.0.0.1”(111)上的mysql服务器。
错误消息在另一个容器中,这是预期的错误消息。每个容器都有自己的127.0.0.1,因为它有自己的网络名称空间。mysql docker映像配置为侦听所有容器接口,另一个容器中的代码可以通过网络服务发现与之联系。my.cnf文件不需要更改。@programmerq您可以通过Docker网络接口公开特定的本地端口。这是个好主意。@stanleyxu2005我们如何为docker compose文件配置相同的文件。MySQL和Ubuntu docker实例分别运行时面临相同的错误。
skip-networking
bind-address = 127.0.0.1