angular - Dockerized Angular/nginx应用未与Rest API对话

标签 angular docker nginx

我的前端有一个Angluar应用程序,我有一个REST API监听端口3001(dockerized rails后端)。

我正在使用以下命令运行我的 Angular 应用程序:

ng serve --proxy-config proxy.conf.json

并带有以下proxy.conf.json文件:
{
   "/server": {
     "target": "http://localhost:3001",
     "secure": false,
     "pathRewrite": {"^/server" : ""}
   },
   "/api": {
      "target": "http://localhost:3001",
      "secure": false
   },
   "/base": {
      "target": "http://localhost:3001",
      "secure": false
   },
   "/users": {
      "target": "http://localhost:3001",
      "secure": false
   }
}

这工作得很好-我的 Angular 应用程序在端口4200上运行,并且可以与我的dockerized后端正常通信。

我现在也想使用nginx对前端进行docker化。

这是我的dockerfile:
FROM node:8.9 as node

WORKDIR /app

COPY package.json /app/

RUN npm install
COPY ./ /app/

ARG env=prod

RUN npm run build -- --prod --environment $env

FROM nginx:1.13

COPY --from=node /app/dist/ /usr/share/nginx/html

COPY ./nginx-custom.conf /etc/nginx/conf.d/default.conf

EXPOSE 80

我的nginx-custom.conf看起来像这样:
server {
  listen 80;
  server_name  localhost;
  root   /usr/share/nginx/html;
  index  index.html index.htm;

  location /server {
      proxy_pass http://localhost:3001;
      proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
      proxy_buffering off;
      proxy_set_header Accept-Encoding "";
  }
  location /api {
      proxy_pass http://localhost:3001;
      proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
      proxy_buffering off;
      proxy_set_header Accept-Encoding "";
  }
  location /base {
      proxy_pass http://localhost:3001;
      proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
      proxy_buffering off;
      proxy_set_header Accept-Encoding "";
  }
  location / {
    try_files $uri $uri/ /index.html =404;
  }
}

我通过应用程序构建:
docker build -t client:prod .

然后,我使用以下代码启动我的应用:
docker run -p 80:80 client:prod

我的Angular应用程序即将在端口80上运行,并且可以看到我的第一个屏幕。但这与我的其余api无关。在浏览器中,我看到我的 Angular 应用程序将html请求发送到4200。我不确定这是正确的,并且根本原因是什么?由于我在端口80上使用了nginx-我的 Angular 应用程序的请求现在不应该转到端口80吗?

我将nginx配置更改为在端口4200上侦听,并使用端口4200:4200启动了dockerized应用程序,但这都不起作用。

知道这里有什么问题吗?

谢谢,
麦可

最佳答案

制作一个docker-compose文件。这样会自动为您创建网络。同一网络上的容器可以互相访问。

同样在Nginx配置中代替localhost:3001。使用api:3001。 “api”是在docker-compose文件中定义的名称。 Docker会将其解析为容器IP地址。

让我知道这是否可以解决您的问题或需要更多信息。

关于angular - Dockerized Angular/nginx应用未与Rest API对话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51191271/

相关文章:

javascript - 更新图表时,arcTween donut 过渡在 Angular 4 中不起作用

dictionary - 未调用 http 响应上的 RxJs/Angular2 映射函数

docker - 无法将请求发送到由Docker托管的.net核心应用

docker - docker中的suricata不允许操作错误

ajax - 是否可以使用 nginx 代理将 get 请求转发到具有端口的同一 url

angular - 如何将对象传递给 rxjs subscribe() 回调函数?

angular - 如何在 Angular 2 中的 ngSwitchCase 之后获取对组件的引用?

linux - 如何计算进程 id 的执行指令数,包括子进程

nginx - 在 Ubuntu 16.04 上的 Nginx 中设置 phpmyadmin 和反向代理后无法 GET/phpmyadmin

nginx - Odoo10 - 使用反向代理后丢失 CSS 和 JS 文件错误 111 连接被拒绝