Pac*_*212 5 python django nginx docker-compose angular
我正在尝试为我大学的一个项目构建我的第一个 docker-compose。我们有一个运行在 naginx 服务器上的 angult 前端。连接前端和后端以及一些后端内容的管理器。从管理器到后端的连接没有问题。管理器运行在 Django 服务器上,后端运行在 Flask 上。问题是 nginx 服务器和 django 上的管理器之间的连接。每次我尝试执行 REST 请求时都会出现错误:
Access to XMLHttpRequest at 'manager:8000/training-data' from origin 'http://localhost:8080' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https#
Run Code Online (Sandbox Code Playgroud)
我在 nginx.conf 中设置了标头,并在 django 服务器中允许 cors,如下面的代码片段所示:
nginx.conf:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
location / {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Accept,Content-Type';
}
}
include /etc/nginx/conf.d/*.conf;
}
Run Code Online (Sandbox Code Playgroud)
Django设置.py:
from corsheaders.defaults import default_headers
ALLOWED_HOSTS = ['127.0.0.1','manager','0.0.0.0','localhost']
INSTALLED_APPS = [
.
.
.
.
'corsheaders',
'py-backend'
]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.BrokenLinkEmailsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware'
]
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOW_HEADERS = default_headers + (
'Access-Control-Allow-Origin',
)
Run Code Online (Sandbox Code Playgroud)
在 angualr 网络应用程序中,我定义了 apiUrl = " http://manager ",baucaus 是 docker-compose 文件中的服务名称。
我不知道我的 Dockerfiles 或 docker-compose 中的某些内容是否有误,所以它们是:
docker-compse.yml
version: '3'
services:
couchdb:
image: couchdb:2.3.1
volumes:
- ./database/data:/home/couchdb/data
ports:
- 5984:5984
manager:
build: ./python/py-backend
volumes:
- ./python/py-backend:/usr/src/app
command: ./dockerScript/wait-for-it.sh couchdb:5984 -t 15 -- python manage.py runserver 0.0.0.0:8000
restart: on-failure
ports:
- 8000:8000
depends_on:
- couchdb
spacyserver:
build: ./python/frameworks/SpacyServer
volumes:
- ./python/frameworks/SpacyServer:/usr/src/app
ports:
- 5000:5000
command: python SpacyServer.py
restart: on-failure
depends_on:
- couchdb
- manager
nginxserver:
build: ./angular
volumes:
- ./angular/deep-tex-rex/dist/deep-tex-rex:/usr/share/nginx/html
ports:
- 8080:80
restart: on-failure
Run Code Online (Sandbox Code Playgroud)
nginx/angualr Dockerfile
FROM nginx
COPY ./deep-tex-rex/dist/deep-tex-rex /usr/share/nginx/html
COPY ./deep-tex-rex/src/assets/server-config/nginx.conf /etc/nginx/nginx.conf
WORKDIR /usr/share/nginx/html
Run Code Online (Sandbox Code Playgroud)
经理/Django Dockerfile
FROM python:3.7.6
COPY . /usr/src/app
WORKDIR /usr/src/app
RUN pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
nginx/angualr 要求.txt
django==3.0.2
django-cors-headers==3.2.1
keras==2.3.1
pycouchdb==1.14
pyexcel==0.5.15
pandas==0.25.3
spacy==2.2.3
Run Code Online (Sandbox Code Playgroud)
我希望有人能帮助我我现在真的很沮丧。我现在花了这么多小时,但我无法解决这个问题。