Вот если совсем в лоб, то:
docker run --help
docker run --user XXX
В принципе вы это сделали в Dockerfile, но подумайте головой... Вы взяли образ httpd, внутри огромный debian
https://github.com/docker-library/httpd/blob/75e85...
Лучше для такой задачи взять alpine
FROM httpd:alpine-2.4
Дальше httpd скорее всего запускается от рута, причем не просто так! Ему просто необходимо это сделать, потому, что существует такая вещь как не привилегированные порты
https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D...
У вас 100500% в конфиге httpd указан порт 80, что меньше 1024, следовательно httpd не в силах запуститься!
httpd запускается от рута, биндится на 80/443 порт, после чего делает suid на uid/gid, указанного в кофниге
https://httpd.apache.org/docs/2.4/mod/mod_unixd.ht...
Теперь зная это, становится понятно, почему в docker logs (имя_контейнера) мы видим ошибки.
Что делать? Ну например запускать апач от пользователя www-data, как и собирались, но на портах выше, чем 1024, а если хочется, чтобы он отвечал на 80 порту на хосте, то не вопрос,
порт-маппинг сделает для вас это, потому, что на хосте dockerd запустит docker-proxy процесс, который будет работать от рута и будет слушать 80 порт, проксируя траффик в контейнер на указанный вами порт, например 8080.
Получаем, что внутри контейнера апач живет на 8080, снаружи на 80.
version: '3.7'
services:
db:
image: mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
adminer:
image: adminer
restart: always
ports:
- 8080:8080
web:
image: httpd:alpine-2.4 # поверьте, вам не нужен nano внутри контейнера! просто подключите все необходимые конфиги с хоста как volume, это правда удобно.
depends_on:
- db
restart: always
ports:
- 80:8080 #HOST:CONTAINER
volumes:
- //c/Docker/sf4/project:/usr/local/apache2/htdocs
# - скопируйте необходимые конфиги себе примерно так: "docker cp /etc/httpd/httpd.conf ." и подключите как volume
- "./httpd/httpd.conf:/etc/httpd/httpd.conf" # пример подключения конфига, где ./httpd/httpd.conf файл рядом с вашим docker-compose.yml