2017-04-18 5 views
0

Ich bin mit diesem lib ändern:Wie nginx-Proxy-Einstellungen

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

Hier ist meine Docker-Compose-Datei:

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 

Ich habe 2 neue Knotendienste ...

Ich kann so tun: curl -H "Host: service2.local" localhost und erhalten Antwort von Service2 ....

Fragen, welche Vorteile habe ich davon? Und wie kann ich Service1 auf Port 80 ausführen?

hier ist Dockerfile von service1:

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

Antwort

0

es einfach ist, brauchen Sie nur Ihre Dienste in Port 80 laufen und diesen Port in Ihrem Dockerfile SETZEN, das ist es.

Solange Sie diesen Port nicht auf Ihrem Host veröffentlichen (wie Sie es mit Nginx tun), gibt es kein Problem.

Der Vorteil ist, dass jeder Service, den Sie dort haben, den anderen erreichen kann, indem Sie den Hostnamen, dh den Namen des Containers verwenden, das ist cool, weil Sie nicht die aktuelle IP Adresse jedes Containers kennen müssen.

Also, wenn Sie in einem dieser Dienste gehen mit bash oder sh sollten Sie in der Lage sein, die anderen Dienste ping durch den Hostnamen verwenden:

Innen service1: ping service2

Die gute Sache über nginx-proxy ist dass es erkennt, wenn Sie einen Ihrer Dienste skalieren und es die nginx-Konfiguration automatisch aktualisiert:

docker-compose scale service1=3

Ich werde 2 weitere Instanzen Ihres Dienstes starten1 und egal, ob Sie 100 haben, kann der Rest der Dienste sie erreichen, indem Sie den Hostnamen: service1 verwenden.

So können Sie die Last ausgleichen, ohne sich über die IP-Adresse jeder Instanz desselben Dienstes Gedanken zu machen.

+0

Wenn ich mich in Container wie folgt anmelden: 'docker run -it mynode: 1.0/bin/bash' und versuche aus irgendeinem Grund einen anderen Container zu pingen: ping: unknown host' Weißt du, was ein Problem ist? – Vladimir

+0

Versuchen Sie es mit dem Namen des Dienstes und dem VIRTUAL_HOST. Wenn sie im selben Netzwerk sind, sollte es funktionieren. Stellen Sie außerdem sicher, dass Sie über die neueste Docker-Version verfügen, in der der eingebettete DNS-Server implementiert ist. – calbertts

+0

Es funktioniert, wenn ich den Dienst mit http req vom antoher Dienst anrufe, aber jetzt wann manuell wie oben ... Wie kann ich das Routing lösen, zum Beispiel wenn ich 2 Dienste mit diffirent Routing habe, ist es möglich diese Routen auf dem zu binden selbe Host automatisch? – Vladimir