В операционных системах, подобных Unix, существует давнее общее правило, согласно которому только пользователь root может открывать "низкие" порты 0-1023. Поскольку вы пытаетесь запустить Apache на стандартном HTTP-порте 80, но вы используете его как пользователь, не являющийся root, вы получаете сообщение об ошибке «Отказано в доступе».
Абсолютно самый простой ответ здесь - использовать предварительно созданное изображение с предварительно установленными PHP и Apache. Docker Hub php
image включает в себя вариант этого. Вы можете использовать более простой Dockerfile:
FROM php:7.4-apache
# Has Apache, mod-php preinstalled and a correct CMD already,
# so the only thing you need to do is
COPY source /var/www/html
# If you want to run as a non-root user, you can specify
RUN useradd -r -U cp
ENV APACHE_RUN_USER cp
ENV APACHE_RUN_GROUP cp
С соответствующими docker-compose.yml
version: '3' # version 2 vs 3 doesn't really matter
services:
filebrowser:
build: .
ports:
- '8000:80'
volumes:
- ./logs:/var/log/apache2
Если вы хотите создать вещи с нуля, следующим самым простым вариантом будет Apache Пользовательская директива : ваш контейнер должен начинаться с root (чтобы он мог связываться с портом 80), а затем дать команду Apache переключиться на непривилегированного пользователя после его запуска. Стандартное изображение php:...-apache
имеет возможность сделать это самостоятельно, что я показал выше.