如何解决使用 NginxDocker、Django、React/Next.js时,按名称调用其他 docker 容器不起作用
我正在使用 Docker 开发一个项目,后端使用 Django,前端使用 Next.js。
我目前通过将每个容器的端口分别绑定到主机的端口 8000
和 3000
来使其在不使用 Nginx 的情况下工作,并且 Next.js 的服务器端从环境变量调用设置为 {{ 1}} 用于身份验证(后端是后端的容器名称)。
但是,包含 backend:8000/users/auth_api/google/
后,它似乎不再起作用。我必须在具有 proxy_pass 设置的后端容器中包含一个 Nginx
前缀,因为我打算将根 /backend/
用于前端。
我尝试设置不同的环境变量,并从日志中验证了来自服务器端的 uri 调用,但它只是没有到达后端(日志显示对环境变量 uri 的 api 调用是由前端进行的,但不是后端收到意味着 api uri 是错误的)。
我尝试过的环境变量:
/
Docker-compose 文件
SS_BACKEND_GOOGLE_AUTH=http://0.0.0.0:8000/users/auth_api/google/
SS_BACKEND_GOOGLE_AUTH=http://0.0.0.0:8000/backend/users/auth_api/google/
SS_BACKEND_GOOGLE_AUTH=http://backend:8000/users/auth_api/google/
SS_BACKEND_GOOGLE_AUTH=http://backend:8000/backend/users/auth_api/google/
SS_BACKEND_GOOGLE_AUTH=http://backend/users/auth_api/google/
SS_BACKEND_GOOGLE_AUTH=http://backend/backend/users/auth_api/google/
nginx.conf
version: '3.8'
services:
backend:
restart: unless-stopped
build:
context: ./backend
dockerfile: Dockerfile.test
command: sh entrypoint.prod.sh
container_name: backend
expose:
- 8000
ports:
- 8000:8000
volumes:
- ./backend/:/usr/src/backend/
- static_volume:/usr/src/backend/staticfiles
- media_volume:/usr/src/backend/mediafiles
env_file:
- ./.env.test
depends_on:
- db
- redis
celery:
restart: unless-stopped
build:
context: ./backend
dockerfile: Dockerfile.test
container_name: celery
command: celery -A backend worker -B -l INFO
env_file:
- ./.env.test
depends_on:
- backend
- redis
celery-beat:
restart: unless-stopped
build:
context: ./backend
dockerfile: Dockerfile.test
container_name: celery-beat
command: celery -A backend beat -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler
env_file:
- ./.env.test
depends_on:
- backend
- redis
- celery
db:
restart: unless-stopped
image: postgres:12.0-alpine
container_name: db
volumes:
- postgres_data_test:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=dsms
- POSTGRES_PASSWORD=dsms
- POSTGRES_DB=dsms_test
env_file:
./.env.test
redis:
image: redis:alpine
container_name: redis
frontend:
restart: unless-stopped
build:
context: ./frontend
dockerfile: Dockerfile.test
container_name: frontend
expose:
- 3000
ports:
- 3000:3000
env_file:
- ./.env.test
depends_on:
- backend
nginx:
restart: unless-stopped
image: nginx:latest
container_name: nginx
ports:
- 80:80
volumes:
- static_volume:/usr/src/backend/staticfiles
- media_volume:/usr/src/backend/mediafiles
- ./nginx/conf.d/:/etc/nginx/conf.d/
depends_on:
- backend
volumes:
postgres_data_test:
static_volume: {}
media_volume: {}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。