Nginx容器不向后端发送请求

时间:2019-08-15 21:47:10

标签: angular nginx docker-compose

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

  • asana_back:在端口8080上进行春季启动;
  • asana_database:端口3306上的mysql;
  • 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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

其余的设置看起来不错,但如果仍然无法完成,请告诉我。您应该可以使用。