2017-04-18 90 views
0

我用這LIB:如何改變nginx的代理設置

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

這裏是我的搬運工,撰寫文件:

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?

這裏是Dockerfile從服務1:

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" ] 

回答

0

這很容易,你只需要在80端口運行的所有服務,並公開您Dockerfile該端口,僅此而已。

只要你不發佈那個端口給你的主機(就像你用nginx做的那樣),沒有問題。

這樣做的好處是,您在那裏的每項服務都可以通過使用主機名到達另一個服務器,這意味着該容器的名稱,這很酷,因爲您不需要知道分配給每個容器的當前IP地址。

所以,如果你去到這些服務之一,bashsh你應該能夠通過使用主機名ping其他服務:

內部服務1: ping service2

好事約nginx-proxy是這是怎麼回事,如果你擴展你的服務的一個檢測,它會自動更新,nginx的配置:

docker-compose scale service1=3

我將啓動其他2個service1實例,無論您有100個,其餘的服務都可以通過使用hostname:service1來訪問它們。

因此,您可以平衡負載,無需擔心同一服務的每個實例的IP地址。

+0

如果我像這樣登錄容器:'docker run -it mynode:1.0/bin/bash'並嘗試從某種原因ping其他容器我得到'ping:unknown host'你知道什麼是問題嗎? – Vladimir

+0

嘗試使用服務的名稱和VIRTUAL_HOST。如果他們在同一個網絡,它應該工作。 另外請確保您擁有最新的Docker版本,其中嵌入式DNS服務器已實施。 – calbertts

+0

它的工作原理時,我使用http req從antoher服務調用服務,但現在當像上面那樣手動執行時...另外,如何解決路由問題,例如,如果我有2個不同路由的服務,可以綁定路由自動同一主機? – Vladimir