如何在单独的docker-compose文件中对nginx和其他服务器进行dockerize?

时间:2019-01-11 18:56:52

标签: docker nginx docker-compose

我有一个我想通过Nginx服务器的reactjs应用程序。该应用程序使API请求一个node.js Express服务器。我决定将nginx与静态网站文件(来自reactjs应用程序)一起打包在一个docker-compose文件中。我为Express服务器创建了另一个docker-compose文件。这些容器当前在我的笔记本电脑上,并且正在使用localhost。很长一段时间以来,我一直无法让他们工作,但是不幸的是,互联网上对此的信息并不多。 (当网站和Express服务器不在Docker内时,它们可以工作。)

首先,我创建了一个新的docker网络:

docker network create --driver bridge appstore-net

这是我用于网站和nginx的docker-compose文件:

version: '3.5'

services:
  appstore-front:
    container_name: appstore-front-production
    build:
      context: .
      dockerfile: Dockerfile-prod
    ports:
      - '80:80'
    networks:
      - appstore-net
    external_links:
      - appstore-bl-server-production

networks:
  appstore-net:
    external: true

这是我的Express服务器的docker-compose文件:

version: '3'
services:
  appstore-bl-server:
    container_name: appstore-bl-server-production
    build:
      dockerfile: Dockerfile-prod
      context: .
    volumes:
      - ".:/usr/src/app"
    ports:
      - "3000:3000"
    networks:
      - appstore-net

networks:
  appstore-net:
    external: true

这是我的nginx配置:

server {
  listen 80;
  listen [::]:80;

  #Docker DNS
  resolver 127.0.0.11;

  server_name localhost;
  access_log /var/log/nginx/appstore.access.log;
  error_log /var/log/nginx/appstore.error.log;

  location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
    try_files $uri $uri/ /index.html;
  }

  location /api {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;

      #hack to prevent nginx to resolve container's host on start up
      set $docker_host "appstore-bl-server";
      proxy_pass http://$docker_host:3000;
  }

  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
    root   /usr/share/nginx/html;
  }
}

如您所见,我正在使用docker DNS解析器,并为包含Express容器名称的URL创建“传递代理”。

我如何使其起作用?


编辑::我发现了两个可能是原因的问题:

1)external_links需要引用容器名称,而不是容器服务。

2)nginx中的docker_host变量需要引用服务名称,而不是容器名称。

通过这些更正,设置可以正常工作(也对OP中的值进行了更正)。

0 个答案:

没有答案