【问题标题】:Nginx container does not send requests to back-endNginx 容器不向后端发送请求
【发布时间】:2019-12-22 07:20:51
【问题描述】:

我创建了一个 docker-compose.yml 文件并创建了三个服务:

  • asana_back: spring-boot 在端口 8080;
  • asana_database: mysql 在端口 3306;
  • asana_front:80 端口上的 nginx;

我将它们添加到名为 call-asana-network 的网络中。

在 docker-compose.yml 文件中,我在字段container_name 中设置了容器的名称,以便容器内部使用名称,但是,在 nginx 中的前端之间的通信无法通信背面并在浏览器中显示错误ERR_NAME_NOT_RESOLVED。我相信是nginx配置文件,但我不知道它是什么。

我不知道这是否重要,但前端系统是 Angular 7。

Environment.prod.ts 代码:

export const environment = {
  production: true,
  serverApiURL: "http://asana_back:8080/api"
};

Docker 编写代码:

version: '3'

services:
  back:
    image: openjdk:8-jre
    container_name: asana_back
    restart: always
    tty: true
    volumes:
      - ./server-spring:/server-spring
    command: java -jar -Dspring.profiles.active=prod /server-spring/system.war
    ports:
      - "8888:8080"
    networks:
      - call-asana-network
  front:
    image: nginx:1.17
    container_name: asana_front
    restart: always
    tty: true
    ports:
      - "8980:80"
    volumes:
      - ./server-nginx/www:/var/www
      - ./server-nginx/conf.d/:/etc/nginx/conf.d/
    networks:
      - call-asana-network
  database:
    image: mysql:8
    container_name: asana_database
    environment:
      MYSQL_ROOT_PASSWORD: fWXDA0UCYnbf7Rr95hyt
      MYSQL_DATABASE: call_asana
    tty: true
    networks:
      - call-asana-network
    ports:
      - "3366:3306"
    restart: always

# Docker network
networks:
  call-asana-network:
    driver: bridge

Nginx app.conf 代码:

server {
    listen 80;
    index index.html;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www;

    location / {
        try_files $uri $uri/ /index.html;
        gzip_static on;
    }
}

浏览器Chrome输入的标头数据:

Request URL: http://asana_back:8080/api/project
Referrer Policy: no-referrer-when-downgrade

Accept: application/json
Origin: http://localhost:8980
Referer: http://localhost:8980/
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36

【问题讨论】:

  • 谁是asana_call
  • 这是一个错误,我改成 asana_back 是正确的,但问题仍然存在。我相信是 nginx 配置,我一直在更改和测试,但无济于事。

标签: angular nginx docker-compose


【解决方案1】:

据我在您的帖子中了解,您有一个 Angular 前端应用程序,它连接到一个后端应用程序,两者都在 Docker 容器中运行。

Angular 应用程序是一个 Javascript 应用程序,由浏览器等在主机上执行。不在容器中。当 javascript 代码执行时(在主机上),它会调用您的 api(后端应用程序)。所以对API的调用是在主机上发起的,谁也不知道asana_back是谁。只有 docker-compose 和 Docker 容器知道这一点。

因此,您的 Angular 配置需要更改为:

export const environment = {
  production: true,
  serverApiURL: "http://localhost:8888/api"
};

其余的设置看起来不错,但如果仍然不起作用,请告诉我。它应该对你有用。

【讨论】:

  • 这是一个愚蠢的错误,请求是在网络浏览器中发出的,而不是在 Nginx 中!谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-07-09
  • 2021-11-09
  • 1970-01-01
  • 2019-07-17
  • 2019-07-19
  • 2021-07-10
  • 2018-08-07
  • 1970-01-01
相关资源
最近更新 更多