Как обслуживать сайт в одном контейнере Docker через отдельный контейнер nginx? - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь создать легко развертываемый Docker-контейнер (или набор контейнеров), который позволит мне и другим разработчикам локально кодировать в среде, соответствующей среде нашего сервера.

Мне удалосьРазвертывание контейнера с соответствующими версиями OS и PHP, содержащего том, который в настоящее время содержит проект Laravel. Он правильно вытягивает код, отражая изменения, внесенные во внешнюю кодовую базу.

Я также генерирую контейнер nginx (хотя в идеале я хотел бы перенести это в один контейнер в будущем). Это представляет "Добро пожаловать в nginx!"сообщение, когда я перехожу на http://localhost:8080/.

Однако мои знания nginx абсолютно минимальны и недостаточны для обслуживания проекта Laravel в другом моем контейнере. Это может быть доступно, и я просто не знаю о правильной маршрутизации, но я думаю, что исключил это.

Мне не приходилось задавать много вопросов раньше, так как я почти всегда могопределите ответ с помощью ресурсов, но это новая область ответственности для меня, пожалуйста, извините, если проблема очевидна или элементарна.

Мой оригинальный пример был построен на образе докера php:7.1.8-apache и прекрасно служил,но он использует другую ОС, соответствующую моим требованиям, а также неправильную версию PHP.

Я попытался объединить изображения, надеясь, что слои будут ответом на мою проблему, но последующие слои перезаписали ОС моего исходного слоя,Я не уверен, могу ли я накапливать слои более дискретно.

Так что теперь я нахожусь в точке, где я использую образ ОС в качестве основы, а затем применяю команды yum для установки PHP. Внутри контейнера идеальны версии для ОС и PHP, а код присутствует.

Мне кажется, что я почти на месте, но я просто не могу узнать, как получить доступ к универсальному проекту Laravel в моем браузере и протестироватькод изменяется по мере их применения.

Обновление Я обновил файлы, чтобы соответствовать приведенному ниже ответу, а также исправил обнаруженную проблему;Файл default.conf копировался в основной докер, а не в nginx. Объединяя это исправление с приведенным ниже ответом, я получаю ошибку 502 Bad Gateway, когда я перехожу к http://localhost:8080/.

index.php Laravel находится в \ public, я попытался обновитьСсылка на индекс в default.conf, чтобы соответствовать этому, но без удачи.

В приложении докера указана следующая ошибка при попытке загрузить http://localhost:8080/ вместо экрана приветствия nginx: [ошибка] 6 # 6: * 24 connect () не удалось (111: соединение отказано) при подключении к восходящему каналу, клиент: 172.22.0.1, сервер:, запрос: «GET / HTTP / 1.1», восходящий поток: «http://172.22.0.2:80/", хост:« localhost: 8080 »

Ни доступ.log, ни error.log не регистрируют какие-либо подробности при обращении к адресу.

docker-composer.yml

version: '3'
services:
  app:
    build:
      context: .
      dockerfile: .docker/primary/Dockerfile
    image: base-docker
    container_name: primarydocker
    #    ports:
    #      - 8080:80
    volumes:
      - .:/srv/jumbledown
    restart: unless-stopped
    tty: true
    networks:
      - draft-network
  webserver:
    build:
      context: .
      dockerfile: .docker/nginx/Dockerfile
    container_name: webserver
    ports:
      - "8080:80"
      - "443:443"
    links:
      - app
    networks:
      - draft-network
    restart: unless-stopped
    tty: true

#Docker Networks
networks:
  draft-network:
    driver: bridge

Dockerfile

FROM centos:7

RUN yum -y install epel-release yum-utils \
    && yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm \
    && yum-config-manager --enable remi-php71 \
    && yum -y install php php-common php-opcache php-mcrypt php-cli php-gd php-curl php-mysql
#    && chown -R www-data:www-data /srv/jumbledown

COPY . /srv/jumbledown

#    RUN docker-php-ext-install mbstring pdo pdo_mysql \
#    && chown -R www-data:www-data /srv/jumbledown

Dockerfile для nginx

FROM nginx:1.12

# ADD ./.docker/site.conf /etc/nginx/conf.d/
ADD ./.docker/nginx/default.conf /etc/nginx/conf.d/

default.conf

upstream appUpstream {
    server app;
}

server {
    listen      80;

    index index.php

    server_name jumbledown.com www.jumbledown.com;

    client_max_body_size 30M;

    location / {
        proxy_pass        http://appUpstream/;
        proxy_redirect                  off;
        proxy_buffering                 off;
        proxy_request_buffering         off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

В идеале я хотел бы иметь возможность запустить docker-compose up --build, а затем ввести URL-адрес в браузере и увидеть всплывающую главную страницу Laravel. .

1 Ответ

0 голосов
/ 08 октября 2019

Вы можете использовать nginx в качестве обратного прокси-сервера, связать его с другими контейнерами и использовать Upstream для доступа к контейнеру, поэтому изменения должны быть:

Сначала docker-compose:

   .
   .
   .
  webserver:
    image: nginx:1.12
    container_name: webserver
    links:
      - app    
    ports:
      - "80:80"
      - "443:443"
    networks:
      - draft-network
    volumes: # mount custom config at runtime
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
    restart: unless-stopped
    tty: true

default.conf должен быть:

upstream appUpstream {
   server app;
}


server {
    listen      80;
    server_name exemple.com;
    client_max_body_size 30M;
     location / {
      proxy_pass        http://appUpstream/;
      proxy_redirect                  off;
      proxy_buffering                 off;
      proxy_request_buffering         off;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
    }

вот ссылка, которая может вам помочь: https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/

...