Docker, nginx, nginx прокси не перенаправляет в нужный контейнер - PullRequest
0 голосов
/ 23 февраля 2020

Я устанавливаю некоторые контейнеры на моем сервере Ubuntu. Таким образом, я создал два простых изображения:

Dockerfile: static-site

FROM nginx:alpine
COPY ./site/ /usr/share/nginx/html

Dockerfile: static-content

FROM nginx:alpine
COPY ./assets/ /usr/share/nginx/html

Файлы Docker в другом месте

Пока здесь вообще никаких проблем. Я установил nginx -прокси и использовал VIRTUAL_HOST для их запуска:

 docker run -d -p 80 -e VIRTUAL_HOST=mysite.com static-site
 docker run -d -p 80 -e VIRTUAL_HOST=static.mysite.com static-content

В результате, какой бы адрес я ни указывал в браузере, он всегда перенаправлял меня на mysite.com.

Что я делаю не так?

Кроме того, у меня есть запись DNS, подобная этой:

*.mysite.com    86400   A   0   xxx.xxx.xx.xx (the ip of mysite.com)

Может ли это быть проблемой?

1 Ответ

1 голос
/ 23 февраля 2020

вы не можете привязать два контейнера к одному и тому же порту («80»). Скорее всего, второй контейнер мертв (вы можете проверить это, запустив docker ps). или он работает с автоматически назначенными портами

docker ps --format " {{.Image}} ==> {{.Ports}}"
nginx ==> 0.0.0.0:32769->80/tcp
nginx ==> 0.0.0.0:32768->80/tcp

. Чтобы устранить эту проблему, вы используете разные порты для контейнеров и настраиваете DNS для связи с балансировщиком нагрузки (чтобы вы могли настроить порт назначения) или вы переключаетесь на использование одного Nginx с несколькими определениями серверов.

Dockerfile:

FROM nginx:alpine
COPY ./site/ /usr/share/nginx/site_html
COPY ./assets/ /usr/share/nginx/assets_html
COPY ./site.conf /etc/nginx/conf.d/default.conf

Nginx Конфиг:

server {
    listen 80;
    server_name  mysite.com;

    root /usr/share/nginx/site_html;
}

server {
    listen 80;
    server_name  static.mysite.com;

    root /usr/share/nginx/static_html;
}
...