如何更改nginx-proxy设置

时间:2017-04-18 23:18:41

标签: nginx docker proxy docker-compose jwilder-nginx-proxy

我正在使用这个lib:

https://github.com/jwilder/nginx-proxy

这是我的docker-compose文件:

version: '2'
services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    ports:
      - "80:80"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro

  whoami:
    image: jwilder/whoami
    environment:
      - VIRTUAL_HOST=whoami.local
  service1:
    image: mynode:1.4
    build: .
    volumes:
        - .:/app
    restart: always
    environment:
      - VIRTUAL_HOST=service1.local
  service2:
    image: mynodeother:1.3
    build: .
    volumes:
        - .:/app
    restart: always
    environment:
      - VIRTUAL_HOST=service2.local

我添加了2个新节点服务......

我可以这样做:curl -H "Host: service2.local" localhost并从service2获得响应....

问题是我从中获得了什么好处?如何在80端口上运行service1?

这是来自service1的Dockerfile

FROM node:6.9.4

# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

RUN npm install nodemon -g

# Install app dependencies
COPY package.json /usr/src/app/
RUN npm install

# Bundle app source
COPY . /usr/src/app

EXPOSE 8080
CMD [ "npm", "start" ]

1 个答案:

答案 0 :(得分:0)

这很简单,你只需要在80端口运行所有服务,并在Dockerfile中显示那个端口,就是它。

只要您不将该端口发布到您的主机(就像您使用nginx一样),就没有问题。

优点是你在那里的每项服务都可以通过使用主机名到达另一个服务,这意味着容器的名称,这很酷,因为你不需要知道当前的ip地址分配给每个容器。

因此,如果您使用bashsh进入其中一项服务,则应该能够使用主机名ping其他服务:

内部服务1: ping service2

关于nginx-proxy的好处是它会检测你是否扩展了你的一个服务并且会自动更新nginx配置:

docker-compose scale service1=3

我将启动service1的其他2个实例,无论你有100个,其余服务都可以使用hostname:service1来访问它们。

因此,您可以平衡负载,而不必担心同一服务的每个实例的IP地址。