docker中部署docker(gitlab lfs push报错)
转载源:https://www.cnblogs.com/diaomina/p/12830449.html 仅仅做了部分修改(直接进行1.1和3部分即可完成部署)。
1.pull gitlab镜像并启动容器
1.1拉取镜像:
sudo docker pull gitlab/gitlab-ce
1.2启动容器:
docker run -itd -p 9980:80 -p 9922:22 -v /usr/local/gitlab-test/etc:/etc/gitlab -v /usr/local/gitlab-test/log:/var/log/gitlab -v /usr/local/gitlab-test/opt:/var/opt/gitlab --restart always --privileged=true --name gitlab-test gitlab/gitlab-ce
命令解释:
-i 以交互模式运行容器,通常与 -t 同时使用命令解释:
-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用
-d 后台运行容器,并返回容器ID
-p 9980:80 将容器内80端口映射至宿主机9980端口,这是访问gitlab的端口
-p 9922:22 将容器内22端口映射至宿主机9922端口,这是访问ssh的端口
-v /usr/local/gitlab-test/etc:/etc/gitlab 将容器/etc/gitlab目录挂载到宿主机/usr/local/gitlab-test/etc目录下,若宿主机内此目录不存在将会自动创建,其他两个挂载同这个一样
–restart always 容器自启动
–privileged=true 让容器获取宿主机root权限
–name gitlab-test 设置容器名称为gitlab-test
gitlab/gitlab-ce 镜像的名称,这里也可以写镜像ID
2.docker 容器内配置ip和端口
2.1进入docker容器:
docker exec -it gitlab-test /bin/bash
2.2修改容器内的gitlab.rb
vi /etc/gitlab/gitlab.rb
# 这个文件是全注释掉了的,所以直接在首行添加如下配
# gitlab访问地址,可以写域名。如果端口不写的话默认为80端口
external_url 'http://192.168.52.128'
# ssh主机ip
gitlab_rails['gitlab_ssh_host'] = '192.168.52.128'
# ssh连接端口
gitlab_rails['gitlab_shell_ssh_port'] = 9922
注意(此处还有问题):此处服务器
为安装了docker的主机,容器
为docker中安装了gitlab的容器。2.2中的external_url ‘http://192.168.52.128’
,原文中存在:9980
,但是,通过测试添加后,会导致不能网页登录gitlab,所以不能添加:9980
,这里:9980
意思是将容器
中gitlab监听哪一个端口,如果添加后容器
中gitlab会监听9980
端口,然后容器
运行时候的映射是服务器
的9980
端口映射到容器
的80
端口,但是容器
中gitlab监听容器
的9980
端口,所以网页访问192.168.52.128:9980
的时候会显示连接失败等信息,因为这样的访问是通过服务器
的9980
端口访问了容器
的80
端口,然后容器
gitlab在监听容器的9980
端口,所以访问失败,所以不能添加:9980
,映射还是服务器
的9980
到容器
的80
,并且gitlab在监听容器
的80
端口,所以后面能正常访问
2.3更新配置,重启gitlab
gitlab-ctl reconfigure
gitlab-ctl restart
2.4访问gitlab
浏览器输入192.168.52.128:9980
会出现gitlab初次登录的修改密码界面。
2.5出现问题
当需要部署gitlab lfs时候,push过程中出现问题,普通工程能进行push,但是包含lfs大文件存储时候,push会报错如下图,见lfs官网
意思是,lfs 工程中通过ssh方式仓库最终会通过https链接设置一下lfs.http就行了,给出了解决方式。但是,我遇到的问题没解决。然后我根据报错,通过http git clone一下,出现了问题,同样会报错80
端口出现问题,我设置http是通过9980映射到80的这里直接报错,所以进行了各种尝试,最终通过成功的设置为ssh端口需要主机设置一个自设端口例如9922
映射到固定的容器端口22
,http端口需要主机和容器一致都是9980,或者都是80也可以,前提是端口没被占用。先面给出了说明和设置。
3.gitlab最终设置
3.1修改docker映射端口和docker中.rb文件
按照第2步中的修改,仅仅能用ssh进行clone,不能用http进行clone。问题在于http的端口映射出现问题,docker中http的端口必须与容器映射一致,不然会出问题,尽管按照2中external_url 'http://192.168.52.128'
设置.rb文件能够访问网页的gitlab,但是不能用 http方式进行git clone ,因为在clone的时候会访问80端口,这就造成问题;此时只能用ssh方式git clone,但是如果需要用到lfs时候就会出现问题。
还有一个问题就是docker进行shh端口映射时候主机端口必须映射到容器的22端口,外部随意,最终版本的docker 命令和.rb设置如下:
docker run -itd -p 9980:9980 -p 9922:22 -v /usr/local/gitlab-test/etc:/etc/gitlab -v /usr/local/gitlab-test/log:/var/log/gitlab -v /usr/local/gitlab-test/opt:/var/opt/gitlab --restart always --privileged=true --name gitlab-test gitlab/gitlab-ce
vi /etc/gitlab/gitlab.rb
# 这个文件是全注释掉了的,所以直接在首行添加如下配
# gitlab访问地址,可以写域名。如果端口不写的话默认为80端口
external_url 'http://192.168.52.128:9980'
# ssh主机ip
gitlab_rails['gitlab_ssh_host'] = '192.168.52.128'
# ssh连接端口
gitlab_rails['gitlab_shell_ssh_port'] = 9922