Запуск виртуальных хостов в док-контейнере apache

У меня есть два приложения php в одном контейнере apache, и я пытаюсь запустить одно из них на порту, поскольку оно должно быть доступно через корневой домен, а не подпапку.

Я хочу запустить приложение на порту 8060, что я пытался сделать с помощью виртуальных хостов apache, но оно не загружает страницу (http://192.168.99.100:8060/), оно просто говорит, что в соединении отказано. Однако обычный корневой IP-адрес - http://192.168.99.100 работает нормально. Мой файл докера выглядит следующим образом

version: '3.2'
  services:
    php-apache:
      build:
        context: ./apache-php
      ports:
        - 80:80
        - 8060:8060

      expose:
        - '8060'
      volumes:
        - ./DocumentRoot:/var/www/html:z

Моя конфигурация апача

<VirtualHost *:60>
    DocumentRoot /var/www/html/api
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Любая помощь будет принята с благодарностью.

Ваш блок VirtualHost не соответствует вашему блоку ports:; Я думаю, вам также нужна директива Listen в конфигурации Apache. (Блок expose: лишний.)

David Maze 01.05.2019 18:10

Как это связано с PHP, Laravel или Docker? Пожалуйста, не используйте ненужные теги

Nico Haase 02.05.2019 10:17

@NicoHaase Я понимаю, о чем вы говорите, однако ответ может не относиться ни к одному из этих тегов, но это док-контейнер, на котором работает Php Laravel. Я не знал, с чем напрямую связана проблема.

Luke.T 02.05.2019 10:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
15
3
34 764
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Благодаря @Дэвид Мэйз я обнаружил проблему, я добавил директивы прослушивания в верхнюю часть моей конфигурации apache и изменил номера портов.

докер-compose.yml

version: '3.2'
services:
  php-apache:
    build:
      context: ./apache-php
    ports:
      - 80:80
      - 8060:8060

    volumes:
      - ./DocumentRoot:/var/www/html:z

Конфигурация апача

Listen 80
Listen 8060

<VirtualHost *:8060>
    DocumentRoot /var/www/html/api
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Структура каталогов

apache-php
   ¬ sqlite3_ext
   ¬ 000-default.conf (Apache config)
   ¬ Dockerfile
   ¬ php.ini
docker-compose.yml

Докерфайл

FROM php:7.2.1-apache
RUN docker-php-ext-install pdo pdo_mysql mysqli

# Enable apache rewrite
COPY 000-default.conf /etc/apache2/sites-available/000-default.conf

#Install spatialite and create symlink for libproj.so.0
COPY sqlite3_ext /etc/sqlite3_ext
RUN apt-get update && apt-get -y install gdal-bin
RUN ln -s /usr/lib/x86_64-linux-gnu/libproj.so.12 /usr/lib/x86_64-linux-gnu/libproj.so.0

#Install gd library for images
RUN apt-get install libpng-dev libfreetype6-dev libjpeg62-turbo-dev -qy \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install gd

#Copy php ini
COPY php.ini /usr/local/etc/php/php.ini
RUN a2enmod rewrite

Сэр, действительно новичок в докере, не могли бы вы помочь мне шаг за шагом, как установить виртуальный хост?

Asad Khan 13.06.2019 12:41

Сэр, я добавил файл докера с именем папки виртуальный хост в папку vhost. vhost имеет другое имя папки www для моих доменов. где разместить конфигурационный файл апача

Asad Khan 13.06.2019 12:57

@AsadKhan Не уверен, что вы настроили докер, но у меня есть файл Docker, на который ссылается «context: ./apache-php» в моем docker compose.yml, как вы можете видеть выше. Затем в моем Dockerfile я добавил в строке 5 (см. выше) команду для замены моей пользовательской конфигурации apache на конфигурацию apache по умолчанию для контейнеров. Я обновил свой ответ, надеюсь, это поможет.

Luke.T 13.06.2019 13:05

@AsadKhan Я не очень хорошо знаком с magento, но он все еще работает на apache, поэтому я бы посмотрел эту статью linode.com/docs/веб-серверы/apache-tips-and-tricks/…. Используйте приведенный выше код, чтобы скопировать конфигурацию apache, она может называться не 000-default.conf, но если вы войдете в контейнер и заглянете в /etc, вы сможете найти его имя в папке apache.

Luke.T 13.06.2019 13:22

Спасибо @Luke.T, это решило и мою проблему!

And Finally 02.11.2021 19:37

Вот решение -- шаг за шагом:

Шаг 1:

Добавить/обновить extra_hosts, hostname, domainname и в docker-compose.yml, и в моем случае я запускаю его через ПОРТ 80.

Вот так мой php сервис выглядит в docker-compose.yml файле.

php:
   build: .
   image: php:7.2-apache
   working_dir: /var/www/html
   volumes:
     - ./:/var/www/html
     - ./php.ini:/usr/local/etc/php/php.ini
   extra_hosts:
     - "lara.local:127.0.0.1"
   hostname: lara.local
   domainname: local 
   ports:
     - 80:80  
   environment:
     - "DB_PORT=3306"
     - "DB_HOST=database"

Шаг 2:
Обновите файл hosts следующей строкой:

127.0.0.1 lara.local

Шаг 3: Проверьте наше имя хоста, выполнив эту команду

docker exec -it <your-php-container-name> hostname

Если вы видите результат lara.local, тогда все готово!

Шаг 4: Перестроить приложение

docker-compose build

Шаг 5: Запустите службы и убедитесь, что приложение работает в http://lara.local

docker-compose up -d

Примечание: Если вы используете другой порт, например 8080, то это будет http://lara.local:8080

PS. If you want to change the DocumentRoot then ssh to your container and cd /etc/apache2/sites-available/000-default.conf and change DocumentRoot path as per your needs.

В моем случае шаг 3 не работал в предложенном вами порядке. Для меня шаг 3 нужно было выполнить после шага 5, а также пришлось использовать docker-compose вместо docker. Итак, команда была docker-compose exec <your-php-container-name> hostname

Gayan 22.08.2020 17:45

Это работает только с доменом. А что на многих доменах?

TonyInuma 19.07.2021 22:54

Другие вопросы по теме