git - Docker 上带有 Alpine Linux 的 Apache git 服务器
问题描述
我正在尝试通过http
在 Docker 中使用 Alpine 的 Apache 映像来提供 git repos。
我能够让 Apache 提供文档和文件夹http
(此文件夹中有一些非 git 存储库,目前这只是一个概念证明,因此可以忽略它们):
但是,当我尝试克隆 git repo 时,我只能成功克隆DynamicDockerTesting.git
repo。当试图克隆其他回购时,我得到
fatal: repository 'http://192.168.1.32/<repo-name>.git' not found
我已经检查了我能想到的DynamicDockerTesting.git
与其他 repo 之间的每一个差异,但还没有找到任何有意义的差异来解释为什么我可以克隆那个特定的 repo,但没有其他的。如果您有关于如何弄清楚为什么会这样的建议,我很想听听他们的意见,但更重要的是,如果您知道我通常做错了什么,以及如何使用 docker-alpine-apache 成功部署这些 repo -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
(而不是/etc/apache2
),所以在这里我只是添加到默认httpd.conf
的逻辑来部署 repos,并启用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
andapacheGitServer.xml
在同一个文件夹中,我一直在构建图像
docker build -t apachegit .
然后我cd
用我的 git repo 'ed 到目录,并发出命令
docker run -d --name apachegitserver -p 80:80 -v $(pwd):/usr/local/apache2/git apachegit
我花了两天时间试图让这个工作,所以在这一点上任何指导都是受欢迎的。
编辑
运行时,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
无论我是否更改权限,我都会得到一个)
解决方案
推荐阅读
- python - Keras LSTM 输入 ValueError: Input 0 is in compatible with layer lstm_1: expected ndim=3, found ndim=4
- c# - 我可以将 Visual Studio 2017 连接到免费的 000webhost MySql 数据库吗?
- css - 如何将网站从 Zurb Foundation 4 迁移到 Zurb Foundation 6?
- flutter - Flutter_bloc 从没有 UI 事件的 firestore 获取更新的数据
- kubernetes - 如何在 k8s 上安装 Fluentd 插件
- python - 使用条件匹配一行中的多个模式
- css - Firefox svg stroke-dasharray 单位 px
- tomcat - 如何修复:失败 - 在上下文路径 [/PollingApp] 部署应用程序但在 Netbeans/Tomcat 中上下文无法启动错误?
- c# - VRT 的 GDAL C# 包装器不写入 VRT 文件
- ios - iOS 9 中的 UISearchController - UISearchBar 中的 TextField 从导航项中剪裁出来