NGINX и Docker-Compose: хост не найден в апстриме - PullRequest
1 голос
/ 10 апреля 2019

Я пытаюсь настроить docker-compose для запуска обратного прокси-сервера NGINX, и у меня возникла проблема.Я знаю, что то, что я пытаюсь сделать, представляется возможным, как указано здесь:

https://dev.to/domysee/setting-up-a-reverse-proxy-with-nginx-and-docker-compose-29jg

и здесь:

https://www.digitalocean.com/community/tutorials/how-to-secure-a-containerized-node-js-application-with-nginx-let-s-encrypt-and-docker-compose#step-2-%E2%80%94-defining-the-web-server-configuration

Моя заявкаочень прост - у него есть внешний и внутренний интерфейсы (nextjs и nodejs), которые я поместил в docker-compose вместе с экземпляром nginx.

Вот файл docker-compose:

version: '3'

services:
  nodejs:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8000:8000"
    container_name: nodejs
    restart: unless-stopped
  nextjs:
    build:
      context: ../.
      dockerfile: Dockerfile
    ports:
      - "3000:3000"
    container_name: nextjs
    restart: unless-stopped
  webserver:
    image: nginx:mainline-alpine
    container_name: webserver
    restart: unless-stopped
    ports:
      - "80:80"
    volumes:
      - web-root:/var/www/html
      - ./nginx-conf:/etc/nginx/conf.d
    depends_on:
      - nodejs
      - nextjs
    networks:
      - app-network


volumes:
  certbot-etc:
  certbot-var:
  web-root:
    driver: local
    driver_opts:
      type: none
      device: /
      o: bind

networks:
  app-network:
    driver: bridge  

А вот файл nginx:

server {
    listen 80;
    listen [::]:80;

    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;

    server_name patientplatypus.com www.patientplatypus.com localhost;

    location /back {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_set_header X-NginX-Proxy true;

      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";

      proxy_pass http://nodejs:8000;
    }

    location / {
      proxy_pass http://nextjs:3000;
    }

    location ~ /.well-known/acme-challenge {
      allow all;
      root /var/www/html;
    }
}

Оба они очень похожи на пример digitalOcean, и я не могу думать о том, насколько они будут отличаться друг от друга, чтобы вызвать ошибки.Я запускаю его с простым docker-compose up -d --build.

Когда я перехожу к localhost:80, я получаю page could not be found, и вот результат моих журналов докера -

patientplatypus:~/Documents/patientplatypus.com/forum/back:10:03:32$docker ps
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS                          PORTS                    NAMES
9c2e4e25e6d9        nginx:mainline-alpine   "nginx -g 'daemon of…"   2 minutes ago       Restarting (1) 14 seconds ago                            webserver
213e73495381        back_nodejs             "/docker-entrypoint.…"   2 minutes ago       Up 2 minutes                    0.0.0.0:8000->8000/tcp   nodejs
03b6ae8f0ad4        back_nextjs             "npm start"              2 minutes ago       Up 2 minutes                    0.0.0.0:3000->3000/tcp   nextjs
patientplatypus:~/Documents/patientplatypus.com/forum/back:10:05:41$docker logs 9c2e4e25e6d9
2019/04/10 15:03:32 [emerg] 1#1: host not found in upstream "nodejs" in /etc/nginx/conf.d/nginx.conf:20

Я довольно растерялся относительно того, что может пойти не так,Если у кого-то есть идеи, пожалуйста, дайте мне знать.Спасибо.

РЕДАКТИРОВАТЬ: СМОТРЕТЬ РЕШЕНИЕ НИЖЕ

1 Ответ

1 голос
/ 10 апреля 2019

Веб-сервер nginx находится в сети app-network, которая отличается от двух других служб, для которых сеть не определена.Если сеть не определена, docker-compose создаст сеть по умолчанию для общего доступа.

Либо скопируйте настройки сети в обе другие службы, либо удалите настройки сети из службы веб-сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...