第一步创建3个挂载卷
mkdir -p /home/gitlab/etc/gitlab
mkdir -p /home/gitlab/var/log
mkdir -p /home/gitlab/var/opt
接着创建镜像,注意,这里端口映射要一模一样,不然克隆时候容器内部还是用80端口,外面用的是8090,就会需要你自己手动添加端口号到url上很麻烦。
docker run
-d #后台运行,全称:detach
-p 8443:443 #将容器内部端口向外映射
-p 8090:8090 #将容器内8090端口映射至宿主机8090端口,这是访问gitlab的端口
-p 8022:8022 #这是访问ssh的端口
--restart always #容器自启动
--name gitlab #设置容器名称为gitlab
-v /home/gitlab/etc/gitlab:/etc/gitlab #将容器/etc/gitlab目录挂载到宿主机/usr/local/gitlab/etc目录下,若宿主机内此目录不存在将会自动创建
-v /home/gitlab/var/log:/var/log/gitlab #与上面一样
-v /home/gitlab/var/opt:/var/opt/gitlab #与上面一样
--privileged=true #让容器获取宿主机root权限
gitlab/gitlab-ce:15.9.1-ce.0 #镜像的名称,这里也可以写镜像ID
docker run -d -p 8443:443 -p 8090:8090 -p 8022:8022 --restart always --name gitlab -v /home/gitlab/etc/gitlab:/etc/gitlab -v /home/gitlab/var/log:/var/log/gitlab -v /home/gitlab/var/opt:/var/opt/gitlab --privileged=true gitlab/gitlab-ce:15.9.3-ce.0
按上面的方式,gitlab容器运行没问题,但是访问8090却打不开,这是因为我映射的是8090=》8090
因为gitlab上创建项目的时候,生成项目的URL访问地址是按容器的hostname来生成的,也就是容器的id。
作为gitlab服务器,我们需要一个固定的URL访问地址,于是需要配置gitlab.rb(原路径etc下,宿主机路径:/home/gitlab/etc/gitlab/gitlab.rb)。
external_url 'http://12012.436.179.111:8090'
gitlab_rails['encoding'] = "utf-8"
gitlab_rails['gitlab_ssh_host'] ='http://12012.426.1759.1341'
gitlab_rails['gitlab_shell_ssh_port'] = 8022
这几行就把原本的80端口改成了8090和8022,上文的同端口映射就是这个原因。这样保证了容器内外都是用的相同端口
修改账号密码
如果报错打不开,可以docker log gitlab进去看看报什么错了,不同版本的gitlab.rb是不一样的,经常不兼容,注意关掉restart always不然看不到error在哪。
# 进入容器内部
docker exec -it gitlab /bin/bash
# 进入控制台
gitlab-rails console -e production
# 查询id为1的用户,id为1的用户是超级管理员
user = User.where(id:1).first
# 修改密码
user.password='!Aa123qweA?'
# 保存 如果报错就是密码太简单搞复杂一点
user.save!
# 退出
exit;
docker restart gitlab