使用Docker中部署GitLab 避坑指南

在容器化的世界中,Docker已经成为了我们部署和管理应用程序的首选工具。然而,在使用Docker部署GitLab时,我们可能会遇到一些问题,本文将为你提供一份详细的避坑指南。网上的教程有的都没说清楚,或者干脆是错的。摸索了好几个小时,才知道为啥要这么做。

安装docker

  1. 这一步自行百度,不细说了。

docker 安装gitlab社区版

  1. 直接执行docker pull gitlab/gitlab-ce:latest命令拉取最新的镜像

    docker pull gitlab/gitlab-ce:latest

  2. 把容器跑起来

    docker run -d --name gitlab --privileged=true --restart always -p 9922:22 -p 9980:9980 -v /home/gitlab/etc:/etc/gitlab -v /home/gitlab/log:/var/log/gitlab -v /home/gitlab/opt:/var/opt/gitlab gitlab/gitlab-ce

    //对命令的解释
    docker run -d
    --name gitlab //指定容器名称
    --privileged=true //指定容器可以获得root权限
    --restart always //指定意外停止时自动重启
    -p 9922:22 //指定ssh clone时候的端口
    -p 9980:9980 //指定http访问时的端口
    -v /home/gitlab/etc:/etc/gitlab //挂载配置文件目录出来
    -v /home/gitlab/log:/var/log/gitlab
    -v /home/gitlab/opt:/var/opt/gitlab
    gitlab/gitlab-ce

  3. 在宿主机直接修改/home/gitlab/etc/gitlab.rb文件

    #这一步决定了以http方式clone时的地址和端口号
    external_url 'http://192.168.1.11:9980'
    #这一步决定了你在浏览器打开时要访问什么端口
    nginx['listen_port'] = 9980

    #ssh 的配置
    #ssh连接地址
    gitlab_rails['gitlab_ssh_host'] = '192.168.1.11'

    ssh连接端口

    gitlab_rails['gitlab_shell_ssh_port'] = 9922

  4. 重启容器,让配置生效

    docker restart gitlab

注意事项

如果是按照上述教程安装的gitlab,则不需要看下边的了。

这都是血泪的教训

  1. 首先,我们需要明确一点,如果你不打算使用80端口访问GitLab,那么在执行docker run命令的时候,一定要让访问端口容器内部和外部的保持一致。否则,这将会给你带来不必要的麻烦。也就是说假如你想用9980这个端口访问你的gitlab,那就映射宿主机的9980端口到容器的9980端口,并修改gitlab.rb文件中nginx的监听端口为9980.否则你还要进容器修改运行时配置文件gitlab.yml,这个文件本身就是由gitlab.rb文件映射得来的。所以我不明白为什么那么多网上的教程用其他端口映射容器内的80,再去容器里修改配置是图啥。
  2. 你还需要修改nginx的监听端口,将nginx'listen_port'设置为9980。这样,nginx就能正确地将流量转发到你的GitLab实例上。这个是默认监听容器内80端口的,记好了是容器内,所以这个根据我们的映射规则,一定要修改为我们映射的9980端口。你问我用其他端口映射容器内80,nginx就监听80不行吗,当然行啦,但是你clone的时候就会发现,哎,这个clone地址怎么没有端口号。然后就又陷入了要去容器里修改gitlab.yml的怪圈。
相关推荐
guo_wen_qiang3 小时前
docker的备份与迁移
运维·docker·容器
小小龙学IT5 小时前
Kubernetes 深度实践:架构、API 与避坑指南
容器·架构·kubernetes
cpolar技术支持7 小时前
外网测试机的异常传不回内网?自托管 Sentry,用 cpolar 打通错误上报链路
python·nginx·docker·cpolar·sentry
MrSYJ10 小时前
别人再问你路由表是啥,这篇文章摔它脸上
docker·云原生·kubernetes
羑悻11 小时前
穿越Docker内核迷雾:揭秘镜像分层存储的叠加态与卷挂载的多维空间穿梭技术
后端·docker·容器
for_ever_love__12 小时前
容器类型全家桶——list、tuple、dict、set 与推导式
python·容器·数据类型·大模型开发
筑梦之路12 小时前
docker-compose方式部署kafka集群(Kraft方式)——筑梦之路
docker·容器·kafka
JavaPub-rodert13 小时前
Docker 镜像地址总失效?基于 DockerHub 项目用 GitHub Actions 做一个自动检测状态页
docker·容器·github
天衍四九-13 小时前
Docker 进阶实战系列(一):容器镜像安全,最小镜像与非 Root 运行
安全·docker·eureka
天衍四九-13 小时前
Docker进阶实战系列(二):容器日志深度治理|驱动配置、自动切割、磁盘爆满彻底解决
docker·容器·eureka