我开始使用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在容器内执行相同的请求时,它可以工作.
我怎么能从容器外部使这些请求工作?
最佳答案 你永远不应该在生产中运行./manage.py runserver,它只用于测试……如果你没有指定服务器监听的IP地址,那么它只适用于localhost(见
here)
所以在你的docker-compose.yml命令应该是
./manage.py runserver 0:8000