如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
构建GitLab容器镜像的Dockerfile。
当前版本:8.1.4
如果您觉得此镜像有用,您可以通过以下方式提供帮助:
Docker是一个较新的项目,由活跃的开发者和测试者社区进行开发和测试,每个Docker版本都包含许多增强和bug修复。
由于开发和发布周期的特性,您必须安装最新版本的Docker,因为您遇到的任何问题可能已在较新的Docker版本中修复。
使用官方Docker发布版安装适用于您平台的最新Docker Engine,也可以使用以下命令安装:
bashwget -qO- https://get.docker.com/ | sh
Fedora和RHEL/CentOS用户应尝试使用setenforce 0禁用selinux,并检查是否解决问题。如果解决,则我无法提供更多帮助。您可以选择禁用selinux(红帽不推荐)或切换到Ubuntu。
您还可以设置DEBUG=true以启用入口脚本的调试,这有助于定位配置问题。
如果使用最新Docker版本和/或禁用selinux仍无法解决问题,请在https://github.com/sameersbn/docker-gitlab/issues%E9%A1%B5%E9%9D%A2%E6%8F%90%E4%BA%A4%E9%97%AE%E9%A2%98%E8%AF%B7%E6%B1%82%E3%80%82
在问题报告中,请确保提供以下信息:
docker version命令的输出docker info命令的输出docker run命令(屏蔽敏感信息)运行GitLab的Docker主机需要至少1GB可用RAM。有关更多信息,请参考GitLab的https://github.com/gitlabhq/gitlabhq/blob/master/doc/install/requirements.md#hardware-requirements%E6%96%87%E6%A1%A3%E3%80%82
镜像的自动构建可在https://hub.docker.com/r/sameersbn/gitlab%E8%8E%B7%E5%8F%96%EF%BC%8C%E8%BF%99%E6%98%AF%E6%8E%A8%E8%8D%90%E7%9A%84%E5%AE%89%E8%A3%85%E6%96%B9%E6%B3%95%E3%80%82
注意:构建也可在Quay.io获取
bashdocker pull sameersbn/gitlab:8.2.1
您也可以拉取latest标签,该标签从仓库HEAD构建
bashdocker pull sameersbn/gitlab:latest
或者,您可以本地构建镜像
bashdocker build -t sameersbn/gitlab github.com/sameersbn/docker-gitlab
最快的启动方式是使用docker-compose。
bashwget https://raw.githubusercontent.com/sameersbn/docker-gitlab/master/docker-compose.yml
生成随机字符串并分配给GITLAB_SECRETS_DB_KEY_BASE环境变量。设置后不应更改此值,并确保备份该值。
提示:您可以使用
pwgen -Bsv1 64生成随机字符串,并将其作为GITLAB_SECRETS_DB_KEY_BASE的值。
使用以下命令启动GitLab:
bashdocker-compose up
或者,您可以按照以下三步指南手动启动gitlab容器以及支持的postgresql和redis容器。
步骤1. 启动postgresql容器
bashdocker run --name gitlab-postgresql -d \ --env 'DB_NAME=gitlabhq_production' \ --env 'DB_USER=gitlab' --env 'DB_PASS=password' \ --volume /srv/docker/gitlab/postgresql:/var/lib/postgresql \ sameersbn/postgresql:9.4-8
步骤2. 启动redis容器
bashdocker run --name gitlab-redis -d \ --volume /srv/docker/gitlab/redis:/var/lib/redis \ sameersbn/redis:latest
步骤3. 启动gitlab容器
bashdocker run --name gitlab -d \ --link gitlab-postgresql:postgresql --link gitlab-redis:redisio \ --publish 10022:22 --publish 10080:80 \ --env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \ --env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \ --volume /srv/docker/gitlab/gitlab:/home/git/data \ sameersbn/gitlab:8.2.1
请参考可用配置参数了解GITLAB_PORT和其他配置选项
注意:请允许几分钟时间让GitLab应用启动。
在浏览器中访问http://localhost:10080,使用默认用户名和密码登录:
现在您应该已经启动并准备好测试GitLab应用。如果要在生产环境中使用此镜像,请继续阅读。
本文档其余部分将使用docker命令行。您可以根据需要将配置调整为docker-compose.yml文件。
GitLab是代码托管软件,因此当docker容器停止/删除时,您不希望丢失代码。为避免数据丢失,应挂载卷到:
/home/git/dataSELinux用户还需要更改挂载点的安全上下文,以使其与selinux兼容。
bashmkdir -p /srv/docker/gitlab/gitlab sudo chcon -Rt svirt_sandbox_file_t /srv/docker/gitlab/gitlab
可以通过在docker run命令中指定-v选项来挂载卷。
bashdocker run --name gitlab -d \ --volume /srv/docker/gitlab/gitlab:/home/git/data \ sameersbn/gitlab:8.2.1
GitLab使用数据库后端存储数据。您可以将此镜像配置为使用MySQL或PostgreSQL。
注意:GitLab HQ推荐使用PostgreSQL而非MySQL
PostgreSQL(推荐)
外部PostgreSQL服务器
该镜像还支持使用外部PostgreSQL服务器。这也通过环境变量控制。
sqlCREATE ROLE gitlab with LOGIN CREATEDB PASSWORD 'password'; CREATE DATABASE gitlabhq_production; GRANT ALL PRIVILEGES ON DATABASE gitlabhq_production to gitlab;
现在可以启动GitLab应用。
假设PostgreSQL服务器主机为192.168.1.100
bashdocker run --name gitlab -d \ --env 'DB_TYPE=postgres' --env 'DB_HOST=192.168.1.100' \ --env 'DB_NAME=gitlabhq_production' \ --env 'DB_USER=gitlab' --env 'DB_PASS=password' \ --volume /srv/docker/gitlab/gitlab:/home/git/data \ sameersbn/gitlab:8.2.1
链接PostgreSQL容器
您可以将此镜像与postgresql容器链接以满足数据库要求。链接gitlab镜像时,postgresql服务器容器的别名应设置为postgresql。
如果链接了postgresql容器,仅DB_TYPE、DB_HOST和DB_PORT设置会通过链接自动获取。您可能仍需要设置其他数据库连接参数,如DB_NAME、DB_USER、DB_PASS等。
为说明与postgresql容器的链接,我们将使用https://github.com/sameersbn/docker-postgresql%E9%95%9C%E5%83%8F%E3%80%82%E5%9C%A8%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8postgresql%E9%95%9C%E5%83%8F%E6%97%B6%EF%BC%8C%E5%BA%94%E4%B8%BApostgresql%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8%E6%8C%82%E8%BD%BD%E5%8D%B7%E3%80%82%E6%9C%89%E5%85%B3%E8%AF%A6%E7%BB%86%E4%BF%A1%E6%81%AF%EF%BC%8C%E8%AF%B7%E5%8F%82%E8%80%83docker-postgresql%E7%9A%84https://github.com/sameersbn/docker-postgresql/blob/master/README.md%E3%80%82
首先,从docker索引拉取postgresql镜像。
bashdocker pull sameersbn/postgresql:9.4-8
为数据持久化,创建postgresql存储并启动容器。
SELinux用户还需要更改挂载点的安全上下文,以使其与selinux兼容。
bashmkdir -p /srv/docker/gitlab/postgresql sudo chcon -Rt svirt_sandbox_file_t /srv/docker/gitlab/postgresql
运行命令如下:
bashdocker run --name gitlab-postgresql -d \ --env 'DB_NAME=gitlabhq_production' \ --env 'DB_USER=gitlab' --env 'DB_PASS=password' \ --volume /srv/docker/gitlab/postgresql:/var/lib/postgresql \ sameersbn/postgresql:9.4-8
上述命令将创建名为gitlabhq_production的数据库,并创建名为gitlab的用户,密码为password,具有gitlabhq_production数据库的访问权限。
现在可以启动GitLab应用。
bashdocker run --name gitlab -d --link gitlab-postgresql:postgresql \ --volume /srv/docker/gitlab/gitlab:/home/git/data \ sameersbn/gitlab:8.2.1
此处,镜像还将自动从postgresql容器获取DB_NAME、DB_USER和DB_PASS变量,因为它们在postgresql容器的docker run命令中指定。这通过docker链接实现,适用于以下镜像:
MySQL
内部MySQL服务器
镜像中已移除内部mysql服务器。请使用链接mysql容器或指定连接到外部mysql服务器。
如果您一直在使用内部mysql服务器,请按照以下说明迁移到链接的mysql容器:
假设您的mysql数据位于/srv/docker/gitlab/mysql
bashdocker run --name gitlab-mysql -d \ --volume /srv/docker/gitlab/mysql:/var/lib/mysql \ sameersbn/mysql:latest
这将启动一个包含您现有mysql数据的mysql容器。现在登录mysql容器,为现有gitlabhq_production数据库创建用户。
现在,您只需使用--link gitlab-mysql:mysql选项将此mysql容器链接到gitlab ci容器,并提供DB_NAME、DB_USER和DB_PASS参数。
有关更多信息,请参考链接MySQL容器。
外部MySQL服务器
可以将镜像配置为使用外部MySQL数据库。启动GitLab镜像时,应通过环境变量指定数据库配置。
启动GitLab镜像前,为gitlab创建用户和数据库。
sqlCREATE USER 'gitlab'@'%.%.%.%' IDENTIFIED BY 'password'; CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`; GRANT ALL PRIVILEGES ON `gitlabhq_production`.* TO 'gitlab'@'%.%.%.%';
现在可以启动GitLab应用。
假设mysql服务器主机为192.168.1.100
bashdocker run --name gitlab -d \ --env 'DB_HOST=192.168.1.100' --env 'DB_NAME=gitlabhq_production' \ --env 'DB_USER=gitlab' --env 'DB_PASS=password' \ --volume /srv/docker/gitlab/gitlab:/home/git/data \ sameersbn/gitlab:8.2.1
链接MySQL容器
您可以将此镜像与mysql容器链接以满足数据库要求。链接gitlab镜像时,mysql服务器容器的别名应设置为mysql。
如果链接了mysql容器,仅DB_TYPE、DB_HOST和DB_PORT设置会通过链接自动获取。您可能仍需要设置其他数据库连接参数,如DB_NAME、DB_USER、DB_PASS等。
为说明与mysql容器的链接,我们将使用https://github.com/sameersbn/docker-mysql%E9%95%9C%E5%83%8F%E3%80%82%E5%9C%A8%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8docker-mysql%E6%97%B6%EF%BC%8C%E5%BA%94%E4%B8%BAmysql%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8%E6%8C%82%E8%BD%BD%E5%8D%B7%E3%80%82%E6%9C%89%E5%85%B3%E8%AF%A6%E7%BB%86%E4%BF%A1%E6%81%AF%EF%BC%8C%E8%AF%B7%E5%8F%82%E8%80%83docker-mysql%E7%9A%84https://github.com/sameersbn/docker-mysql/blob/master/README.md%E3%80%82
首先,从docker索引拉取mysql镜像。
bashdocker pull sameersbn/mysql:latest
为数据持久化,创建mysql存储并启动容器。
SELinux用户还需要更改挂载点的安全上下文,以使其与selinux兼容。
bashmkdir -p /srv/docker/gitlab/mysql sudo chcon -Rt svirt_sandbox_file_t /srv/docker/gitlab/mysql
运行命令如下:
bashdocker run --name gitlab-mysql -d \ --env 'DB_NAME=gitlabhq_production' \ --env 'DB_USER=gitlab' --env 'DB_PASS=password' \ --volume /srv/docker/gitlab/mysql:/var/lib/mysql \ sameersbn/mysql:latest
上述命令将创建名为gitlabhq_production的数据库,并创建名为gitlab的用户,密码为password,具有gitlabhq_production数据库的完全远程访问权限。
现在可以启动GitLab应用。
bashdocker run --name gitlab -d --link gitlab-mysql:mysql \ --volume /srv/docker/gitlab/gitlab:/home/git/data \ sameersbn/gitlab:8.2.1
此处,镜像还将自动从mysql容器获取DB_NAME、DB_USER和DB_PASS变量,因为它们在mysql容器的docker run命令中指定。这通过docker链接实现,适用于以下镜像:
GitLab使用redis服务器作为键值数据存储。可以
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务