Я пытаюсь обслуживать репозитории git через http
, используя образ Apache Alpine в Docker.
Я могу заставить Apache обслуживать документы и папки более http
(есть некоторые репозитории без gitв этой папке это только подтверждение концепции на данный момент, поэтому их можно игнорировать):
![docker alpine apache git](https://i.stack.imgur.com/Ke9UQ.png)
Однако, когда я пытаюсь клонироватьGit РЕПО, я могу только успешно клонировать репо DynamicDockerTesting.git
.При попытке клонировать другое репо я получаю
fatal: repository 'http://192.168.1.32/<repo-name>.git' not found
Я проверил каждую разницу, которую я могу представить, между DynamicDockerTesting.git
и подарком другого репо, но не смог найти сколько-нибудь значимого различия, которое могло бы объяснитьпочему я могу клонировать этот конкретный репо, но ни один из других.Если у вас есть предложения о том, как выяснить, почему это так, я бы хотел их услышать, но что более важно, если вы знаете, что я делаю неправильно, и как успешно развернуть эти репозитории с помощью docker-alpine-apache-git комбинация, я был бы чрезвычайно признателен.
Вот содержимое моего Dockerfile
FROM httpd:alpine
RUN mkdir -p /usr/local/apache2/git
RUN apk update && apk upgrade && apk add git git-gitweb apache2-utils apache2
COPY apacheGitServer.xml /usr/local/apache2/
RUN cat /usr/local/apache2/apacheGitServer.xml >> /usr/local/apache2/conf/httpd.conf
RUN sed -i '/LoadModule alias_module modules\/mod_alias.so/aLoadModule cgi_module modules/mod_cgi.so' /usr/local/apache2/conf/httpd.conf
Кажется, что Alpine Apache запускает все из /usr/local/apache2
(вместо * 1024)*), поэтому здесь я просто добавляю к стандартному httpd.conf
логику для развертывания репозиториев, а также включаю модуль cgi
, так как он отключен по умолчанию (env
и alias
включены по умолчанию).
Вот содержание apacheGitServer.xml
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /usr/local/apache2/git/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<VirtualHost *:80>
DocumentRoot /usr/local/apache2/git
ServerName 192.168.1.32
<Directory "/usr/local/apache2/git">
Allow from All
Options +Indexes +ExecCGI
AllowOverride All
AddHandler cgi-script cgi
</Directory>
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv GIT_PROJECT_ROOT /usr/local/apache2/git
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend
#ScriptAlias / /usr/share/gitweb/gitweb.cgi
</VirtualHost>
apacheGitServer.xml
прошло ряд ревизий, так как я попробовал каждую конфигурацию, которая могла придумать, чтобы это работало, ноно безрезультатно.Эта конфигурация делает репозитории доступными, но не клонированными (за исключением, конечно, DynamicDockerTesting.git
)
С Dockerfile
и apacheGitServer.xml
в одной папке, я создаю образ с
docker build -t apachegit .
, а затем я cd
'отправился в каталог с моим git-репо и выдал команду
docker run -d --name apachegitserver -p 80:80 -v $(pwd):/usr/local/apache2/git apachegit
Iпотратили два дня, пытаясь заставить это работать, поэтому любые указания на этом этапе приветствуются.
РЕДАКТИРОВАТЬ
![top command inside container](https://i.stack.imgur.com/4GKlF.png)
бег top
Я вижу, что процесс принадлежит daemon
, у меня cd
'до /usr/local/apache2/git
изнутри контейнера и запускаю chown -R daemon:daemon .
, но теперь, когда я клонирую:
git clone http://192.168.1.32/git/ScalaOpenCV.git
Я получаю 403
:
fatal: unable to access 'http://192.168.1.32/git/<repo name>.git/': The requested URL returned error: 403
(на самом деле я получаю 403
независимо от того, изменяю я разрешения или нет)