大家好,最近开始学习Docker,在浏览器中打开容器页面时遇到了如下问题。
禁止访问
您无权访问此资源。
Apache/2.4.61 (Debian) 服务器位于本地主机端口 8080
并且还在容器日志中得到了这个:
2024-08-21 21:03:12 172.18.0.1 - - [21/Aug/2024:18:03:12 +0000]“GET / HTTP/1.1”403 493“- " "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, 如 Gecko) Chrome/127.0.0.0 Safari/537.36" 2024-08-21 21:03:12 [8 月 21 日星期三 18:03: 12.937792 2024] [autoindex:错误] [pid 17:tid 17] [客户端172.18.0.1:44598] AH01276:无法提供目录/var/www/html/:找不到匹配的DirectoryIndex(index.php,index.html),和服务器生成的目录索引被Options指令禁止
从日志中可以清楚地看出,错误是由于找不到index.php和html文件而导致的,但是我到底应该在哪里指示这些文件的路径呢?
Dockerfile
# Используем официальный PHP образ с Apache
FROM php:8.3-apache
# Устанавливаем зависимости и расширения PHP
RUN apt-get update && apt-get install -y \
libpng-dev \
libjpeg-dev \
libfreetype6-dev \
libzip-dev \
unzip \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install gd \
&& docker-php-ext-install zip \
&& docker-php-ext-install pdo_mysql mysqli
# Устанавливаем Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Копируем исходный код в контейнер
COPY . /var/www/html
# Указываем рабочий каталог
WORKDIR /var/www/html
# Устанавливаем зависимости Laravel
RUN composer install
# Копируем .env файл
COPY .env.example .env
# Выполняем миграции базы данных
RUN php artisan key:generate
# Открываем порт
EXPOSE 80
# Запускаем Apache
CMD ["apache2-foreground"]
docker-compose.yml
version: '3.8'
services:
# Сервис для PHP с Apache
web:
image: php:8.3-apache
ports:
- "8080:80" # Пробрасываем порт 80 контейнера на порт 8080 хоста
volumes:
- D:/OSPanel/domains/gallery:/var/www/html
networks:
- app-network
# Сервис для MySQL
db:
image: mysql:8.0
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
- MYSQL_DATABASE=galleryDB
volumes:
- db_data:/var/lib/mysql
networks:
- app-network
networks:
app-network:
driver: bridge
volumes:
db_data:
default.conf Apache 配置文件
ServerRoot "/usr/local/apache2"
Listen 80
ServerName localhost
DocumentRoot "/var/www/html/public"
<Directory "/var/www/html/public">
AllowOverride All
Require all granted
</Directory>
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/public
<Directory /var/www/html/public>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
ErrorLog /usr/local/apache2/logs/error_log
CustomLog /usr/local/apache2/logs/access_log common