TL; DR
Это на /usr/local/apache2/conf/extra/httpd-vhosts.conf
, но вам нужно будет сделать больше, чем просто скопировать ваше, потому что a) Apache не будет знать об этом; и б) ваши пути macOS не будут работать.
Длинная версия
Документы Docker для официального Apache изображения показывают, как извлечь основной Apache config:
docker run --rm httpd:2.4 cat /usr/local/apache2/conf/httpd.conf > my-httpd.conf
Теперь у вас есть my-httpd.conf
локально, вне контейнера. Откройте его и посмотрите - это просто стандартный Apache конфиг, а в нижней части вы увидите обычное:
# Virtual hosts
#Include conf/extra/httpd-vhosts.conf
Так что теперь мы можем увидеть как включить конфигурацию vhost и куда его поместить.
Сначала раскомментируйте строку Include
в вашей локальной копии my-httpd.conf
, чтобы конфигурация vhosts действительно была включена. Мы скопируем эту отредактированную версию в контейнер, перезаписав оригинал, чтобы она использовалась во время выполнения.
Теперь нам нужно обновить существующий файл конфигурации vhosts (maps.conf
), чтобы он подходил для использования. в контейнере. MacOS-специфицированные c пути, которые вы в данный момент используете в этом файле, не будут существовать внутри контейнера, поэтому файл не будет работать как есть.
Вы можете увидеть основной Do c root в основном my-httpd.conf
файле:
DocumentRoot "/usr/local/apache2/htdocs"
Для простоты давайте поместим ваш контент в эту основную Do croot, скажем, в директорию с именем maps/
. Скопируйте ваш maps.conf
в новый файл (скажем, my-vhosts.conf
в том же каталоге, что и my-httpd.conf
), обновив ваши пути macOS /Library/WebServer/Documents/maps
, указав путь к контейнеру /usr/local/apache2/htdocs/maps
. Я не могу скопировать ваше приложение / конфиг, но для демонстрации я использовал это супер простое my-vhosts.conf
:
<VirtualHost *:80>
DocumentRoot "/usr/local/apache2/htdocs/maps"
</VirtualHost>
Затем соединил все это в Dockerfile. Он должен скопировать в 2 новых файла конфигурации, а также ваш фактический контент. Обратите внимание, что вы не можете использовать абсолютный путь к файлу source в команде COPY
, поэтому вам нужно сначала переместить или скопировать локальное содержимое maps/
в текущий каталог.
FROM httpd:2.4
COPY ./my-httpd.conf /usr/local/apache2/conf/httpd.conf
COPY ./my-vhosts.conf /usr/local/apache2/conf/extra/httpd-vhosts.conf
COPY ./maps /usr/local/apache2/htdocs/maps
Теперь просто соберите его и запустите. Снова используя команды, показанные в Docker документах для Apache:
docker build -t my-apache2 .
docker run -dit --name my-running-app -p 8080:80 my-apache2
Наконец, для полноты, для локальной разработки, где вы можете не захотеть продолжать воссоздание и запуск образа, как вы Работая над вашим приложением или настраивая ваши конфигурационные файлы, вы можете отобразить эти вещи в контейнер как тома, а не просто скопировать их один раз во время сборки. Таким образом, вы можете работать и видеть ваши изменения вживую в контейнере.
Самый простой способ для этого - использовать docker-compose
и docker-compose.yml
:
version: '3'
services:
apache:
image: httpd:2.4
container_name: apache
ports:
- "8080:80"
volumes:
- ./my-httpd.conf:/usr/local/apache2/conf/httpd.conf
- ./my-vhosts.conf:/usr/local/apache2/conf/extra/httpd-vhosts.conf
- ./maps:/usr/local/apache2/htdocs/maps
Тогда docker-compose up
запустить его.