Docker 搭建 Gitlab 服务器(修改端口)
按上面的方式,gitlab容器运行没问题,但在gitlab上创建项目的时候,生成项目的URL访问地址是按容器的hostname来生成的,也就是容器的id。这个在测试的时候会非常有用,把容器所有的文件改动和配置信息导入成一个新的docker镜像,然后用这个新的镜像重起一个容器,这对之前的容器不会有任何影响。主要是要注意docker跟容器内的端口映射,我们外面访问的端口号,并不是容器中的端口号,通过映
环境
Docker version 23.0.3
GitLab Community Edition 15.10.2
Gitlab安装教程
安装GitLab官方推荐至少4G的内存,否则可能会卡顿或者运行非常慢,建议采用4G以上的云服务进行测试,或者本地搭建虚拟机的方式来做。
搜索Gitlab镜像
docker search gitlab
下载Gitlab社区免费版最新镜像
说明:ce 表示社区免费版 ,ee 表示企业付费版
docker pull gitlab/gitlab-ce
运行Gitlab镜像
docker run -d \
--name gitlab \
--restart always \
-p 8443:443 -p 8080:80 -p 8022:22 \
-v /home/gitlab/config:/etc/gitlab \
-v /home/gitlab/logs:/var/log/gitlab \
-v /home/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce
参数说明
- -d 指定后台运行
- –hostname 指定主机名
- –name 指定容器名
- -p 端口映射;https端口:443;http端口:80;ssh端口:22
- –restart always 容器停止后的重启策略: 容器退出时总是重启
- -v 指定挂载存储卷首先在宿主主机创建对应的目录
配置
按上面的方式,gitlab容器运行没问题,但在gitlab上创建项目的时候,生成项目的URL访问地址是按容器的hostname来生成的,也就是容器的id。作为gitlab服务器,我们需要一个固定的URL访问地址,于是需要配置gitlab.rb。
接下来的配置请在容器内进行修改,不要在挂载到宿主机的文件上进行修改。否则可能出现配置更新不到容器内,或者是不能即时更新到容器内,导致gitlab启动成功,但是无法访问
#进容器内部
docker exec -it gitlab /bin/bash
#修改gitlab.rb
vi /etc/gitlab/gitlab.rb
#加入如下
#gitlab访问地址,可以写域名。如果端口不写的话默认为80端口,这里的端口号要与启动容器时的端口映射相对应
external_url 'http://192.168.124.194'
#ssh主机ip
gitlab_rails['gitlab_ssh_host'] = '192.168.124.194'
#ssh连接端口
gitlab_rails['gitlab_shell_ssh_port'] = 8022
# 让配置生效
gitlab-ctl reconfigure
#重启gitlab
gitlab-ctl restart
#退出容器
exit
有些博主说还需要修改/opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml这个文件中的端口,其实没必要,gitlab-ctl reconfigure这一步已经跟新过来了。
浏览器访问
浏览器访问http://192.168.124.194:8080就可以看到了
第一次访问,账号是root,密码在容器中/etc/gitlab/initial_root_password或主机/home/gitlab/config/initial_root_password,这个文件24小时后会删除。
修改外部访问端口
修改外部访问端口其实就是修改docker对gitlab容器的端口映射。
方法一: 删除原有容器,重新建新容器
这个解决方案最为简单,把原来的容器删掉,重新建一个。当然这次不要忘记加上端口映射。
# 删除容器
docker rm gitlab
# 构建容器,命令参考上面,注意修改端口号
优缺点:优点是简单快捷,在测试环境使用较多。缺点是如果是数据库镜像,那重新建一个又要重新配置一次,就会比较麻烦。
方法二:修改容器配置文件,重启docker服务
我们需要新增一个端口,就是通过这个方式处理的,亲测有效。
首先关闭docker服务
systemctl stop docker
关闭之后,找到容器的配置文件路径,通常都是安装在这个路径下方
cd /var/lib/docker/containers
然后我们在ls查看一下容器,找我们想要修改的容器ID
进入后有个 hostconfig.json 文件
如上图所示,文件中其中有一项是PortBindings:
- 80/tcp对应的是容器内部的80端口,
- HostPort对应的是映射到宿主机的端口8080。
按需修改端口,然后重启docker服务,再启动容器服务就可以了
systemctl restart docker
优缺点:这个方法的优点是没有副作用,操作简单。缺点是需要重启整个docker服务,如果在同一个宿主机上运行着多个容器服务的话,就会影响其他容器服务。
注意:一定要先停掉docker修改配置才能成功。
方法三:利用docker commit新构镜像
docker commit:把一个容器的文件改动和配置信息commit到一个新的镜像。这个在测试的时候会非常有用,把容器所有的文件改动和配置信息导入成一个新的docker镜像,然后用这个新的镜像重起一个容器,这对之前的容器不会有任何影响。
停止docker容器
docker stop gitlab
commit该docker容器
docker commit gitlab new_gitlab:tag
重新起一个容器
docker run ...
优缺点:这种方式的优点是不会影响统一宿主机上的其他容器,缺点是管理起来显得比较乱,没有第二种方法那么直观
修改root密码
# 进入容器内
gitlab-rails console -e production #等待ruby控制台出来,时间还是挺长的,我等了有十多分钟!
user = User.where(id: 1).first
user.password="bnadiidphq" #修改密码为bnadiidphq, 密码太简单等下保存不了
user.password_confirmation="bnadiidphq" #确认密码
user.save! #保存,!不能少
quit #退出
注意点
主要是要注意docker跟容器内的端口映射,我们外面访问的端口号,并不是容器中的端口号,通过映射关系才能访问到,如上面的8080端口,映射到容器内的80端口一样。
如果按上面的方式还没成功,建议查看下端口占用情况
netstat -nultp
还有就是防火墙是否开着,如果开着,就得配置防火墙开放服务器的端口
相关命令如下:
systemctl status firewalld #查看防火墙状态
systemctl start firewalld #开启防火墙
systemctl stop firewalld #关闭防火墙
firewall-cmd --list-ports #查看开放端口
#设置8082-8084端口开放
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --list-ports #再次查看是否开放
更多推荐
所有评论(0)