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

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

Ich habe 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 die folgende 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 zwei Container erstellt werden, wie kann ich dann erreichen, dass nginx den localhost:8000 auf dem anderen Container erkennt?

Antwort1

Sie verwenden die Container nameso, wie Sie sie in definiert haben docker-compose.yml. Docker stellt die IP-Adressen für die benannten Container über DNS innerhalb jedes Containers bereit und aktualisiert sie, wenn die Container aktualisiert werden.

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

    proxy_pass http://server:8000;

Dokumentation:Vernetzung in Compose

Antwort2

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

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

und dann verwenden:

proxy_pass http://backend

verwandte Informationen