Docker-Compose für Nginx- und NodeJS-Server


8

Ich habe die folgende docker-compose.ymlDatei:

version: '3'
services:
    server:
        build:
            context: ../../
            dockerfile: ./packages/website/Dockerfile
        command: node /cutting/index.js
        environment:
            PORT: 8000
            NODE_ENV: production
        restart: always
    nginx:
        build:
            context: ./
            dockerfile: ./nginx/Dockerfile
        command: tail -f /dev/null
        depends_on:
            - server
        ports:
            - "8000:8000"
        restart: always

Und folgendes nginx.conf:

worker_processes 1;

user nobody nogroup;
pid /tmp/nginx.pid;
error_log /tmp/logs/nginx.error.log;

events {
    worker_connections 1024;
    accept_mutex off;
}

http {
    include mime.types;
    default_type application/octet-stream;
    access_log /tmp/logs/nginx.access.log combined;
    sendfile on;

    server {
        proxy_http_version 1.1; # this is essential for chunked responses to work

        listen   80; ## listen for ipv4; this line is default and implied
        listen   [::]:80 default ipv6only=on; ## listen for ipv6
        client_max_body_size 4G;
        server_name frontend;

        gzip on;
        gzip_disable "msie6";
        gzip_vary on;
        gzip_proxied any;
        gzip_comp_level 6;
        gzip_buffers 16 8k;
        gzip_http_version 1.1;
        gzip_types application/javascript text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

        keepalive_timeout 5;

        location /static/  {
            alias /static/;
        }

        location  / {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;

            # UNCOMMENT LINE BELOW IF THIS IS BEHIND A SSL PROXY
            #proxy_set_header X-Forwarded-Proto https;

            proxy_redirect off;
            proxy_pass   http://localhost:8000;
        }
    }
}

Wenn dadurch 2 Container erstellt werden, wie kann ich nginx dazu bringen, den localhost zu sehen: 8000 auf dem anderen Container?

Antworten:


13

Sie verwenden die Container so, namewie Sie sie definiert haben docker-compose.yml. Docker stellt die IP-Adressen für die genannten Container über DNS in jedem Container bereit und aktualisiert sie, wenn die Container aktualisiert werden.

In diesem Fall haben Sie es genannt server, also würden Sie es verwenden.

    proxy_pass http://server:8000;

Dokumentation: Networking in Compose


1
Mein Mann. Ich habe den ganzen Tag darüber nachgedacht, wie ich meinen Laptop zerschmettere, bis deine Antwort mich von der Kante beruhigt hat. Dies verdient 10x Upvotes. Ich schulde dir ein Bier.
Scniro

0

In diesem Fall müssen Sie Upstream wie folgt verwenden:

upstream backend {
    server express-server:81; #you container/service name
}

und dann benutze:

proxy_pass http://backend
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.