Docker 中的 Django 服务器

Ant*_*ine 5 django python-3.x docker docker-compose

我开始开发一个带有 Django 后端的应用程序,我希望在 Docker 中完成。我几乎成功了,但我仍然遇到问题。目前我有两个容器正在运行:

码头工人

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

python3 manage.py runserver 0.0.0.0:8000
Run Code Online (Sandbox Code Playgroud)

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

我的 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
Run Code Online (Sandbox Code Playgroud)

我关于数据库的 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',
        },
    },
}
Run Code Online (Sandbox Code Playgroud)

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

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

Maz*_*Tov 2

你永远不应该./manage.py runserver在生产中运行,它仅用于测试...此外,如果你不指定服务器侦听的IP地址,它仅适用于本地主机(请参阅此处

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

./manage.py runserver 0:8000
Run Code Online (Sandbox Code Playgroud)