【问题标题】:Django server in a DockerDocker 中的 Django 服务器
【发布时间】:2018-05-04 20:03:00
【问题描述】:

我开始使用 Django 后端开发应用程序,我希望在 Docker 中进行。我几乎设法做到了,但我仍然遇到问题。目前我有两个容器正在运行:

第一个包含我的 django 应用程序,完整的命令是

python3 manage.py runserver 0.0.0.0:8000

第二个是托管我的数据库。

我的 docker-compose.yml 文件是这个:

version: '3'
services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD : root
      MYSQL_DATABASE : ml_gui
  back:
    build: ./back/
    command: python3 manage.py runserver
    ports:
      - "8000:8000"
    depends_on:
      - db

我关于数据库的 django 设置是:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'ml_gui',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': 'db',
        'PORT': '3306',
        'OPTIONS': {
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
        },
        'TEST': {
            'CHARSET': 'utf8',
            'COLLATION': 'utf8_general_ci',
        },
    },
}

问题是,当我在 localhost:8000 上的容器外发出请求(我在浏览器中尝试过,使用 curl 和 Postman)时,我没有答案。但是,当我使用 curl 在容器内执行相同的请求时,它可以工作。

我怎样才能使这些请求在容器外部工作?

【问题讨论】:

  • 主机上有防火墙吗?喜欢 iptables
  • 是的,我不知道我安装了 iptables。
  • 8000端口是否暴露在iptables中? Docker 应该自动完成

标签: django python-3.x docker docker-compose


【解决方案1】:

你不应该在生产环境中运行./manage.py runserver,它只是为了测试……如果你没有指定服务器监听的IP地址,它只能用于本地主机(参见here

所以在你的 docker-compose.yml 中,命令应该是

./manage.py runserver 0:8000

【讨论】:

  • 谢谢,这个解决方案有效。因为我有 iptables 我试图删除它,然后卸载了 docker。我按照网站上的说明重新安装了 docker-ce,而不是通过 apt install docker。
猜你喜欢
  • 2019-01-22
  • 2018-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-07
  • 2017-08-04
相关资源
最近更新 更多