返回首页

Win11使用Docker安装Gitlab

日期图标编写于2025年07月28日   修订于2025年07月28日

正文


1、Win11下载安装Docker

下载安装包:https://www.docker.com/products/docker-desktop

下载完成以后双击安装,安装完成以后重启电脑。

2、更新Linux子系统

在终端执行命令:wsl --update

3、拉取Gitlab镜像

终端执行命令:docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/gitlab/gitlab-ce:latest

4、查看已经下载的镜像

在终端执行命令:docker images

图片

5、部署

docker run --detach `
  --hostname localhost `
  --publish 18080:18080 --publish 2289:22 `
  --name gitlab `
  --restart always `
  --volume C:/GitLab/config:/etc/gitlab `
  --volume C:/GitLab/logs:/var/log/gitlab `
  --volume C:/GitLab/data:/var/opt/gitlab `
  swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/gitlab/gitlab-ce:latest

参数说明:

--publish 18080:18080 --publish 2289:22 `:自定义端口:HTTP 18080,SSH 2289。

6、修改配置文件

打开 C:\GitLab\config\gitlab.rb

external_url 'http://localhost:18080'  # 修改为你的端口
gitlab_rails['gitlab_shell_ssh_port'] = 2289  # 修改SSH端口
nginx['listen_port'] = 18080                # Nginx监听端口

7、重启容器

在终端执行命令:docker restart gitlab

也可以从页面上操作

图片

8、浏览器访问

重启以后耐心等待几分钟再访问。

url:http://localhost:18080

修改root密码见如下命令。

9、其他命令

# 进入gitlab容器
docker exec -it gitlab bash

# (在容器内执行)查看gitlab状态
gitlab-ctl status

# (在容器内执行)重载配置
gitlab-ctl reconfigure

# (在容器内执行)重启
gitlab-ctl restart

# (在容器内执行)离开容器
exit

# 停止并删除旧容器
docker stop gitlab
docker rm gitlab

# 查看端口
docker port gitlab

# 查看日志
docker logs --tail 50 gitlab

# (容器内执行)修改root密码
gitlab-rails console -e production

user = User.where(username: 'root').first
user.password = '你的密码'
user.password_confirmation = '你的密码'
user.save!
exit

10、问题排查

# 查找占用 18080 端口的进程
Get-Process -Id (Get-NetTCPConnection -LocalPort 18080).OwningProcess

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
    863      43   118092     105196     595.50  11724   1 com.docker.backend
    180      13     2512       5624       0.11  17772   1 wslrelay

wslrelay 是 Windows Subsystem for Linux (WSL) 的端口转发工具,它与 Docker 同时监听 18080 端口,导致冲突,根本原因是 Docker 和 WSL 2 的网络栈冲突。

解决办法:
# 终止 wslrelay 进程
Stop-Process -Id 17772 -Force

# 重启 Docker 服务:右键托盘区的docker图标,点击restart。

# 重启 GitLab 容器
docker restart gitlab

# (管理员权限运行终端)创建防火墙规则
New-NetFirewallRule -DisplayName "GitLab_18080" -Direction Inbound -LocalPort 18080 -Protocol TCP -Action Allow

# 查看已创建的规则
Get-NetFirewallRule -DisplayName "GitLab_18080" | Format-List *

# 检查规则是否启用
Get-NetFirewallRule -DisplayName "GitLab_18080" | Select-Object Name, DisplayName, Enabled