解决 Windows Docker 安装 Gitlab Volume 权限问题

本文详细介绍在Windows环境下使用Docker部署GitLab的步骤及注意事项,包括解决volume映射问题,使用Docker-Compose简化配置,以及如何正确显示WebUI端口和处理镜像备份。

首先,Gitlab 官方是不支持 Windows 下部署 Gitlab 镜像的,所以正常的 Gitlab 服务还是部署在 Linux 上比较好。本地部署只是用于个人开发测试环境。

问题描述

其实搭建 Gitlab 本省是一件很简单的事情,直接 pull 官方的 Gitlab 镜像开起来就可以用了。

docker run --detach \
  --hostname gitlab.example.com \
  --publish 443:443 --publish 80:80 --publish 22:22 \
  --name gitlab \
  --restart always \
  --volume /srv/gitlab/config:/etc/gitlab \
  --volume /srv/gitlab/logs:/var/log/gitlab \
  --volume /srv/gitlab/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest

在 Windows 下我们把 volume 配置成本地路径运行后会出现一下错误:

Error executing action create on resource 'storage_directory[/var/opt/gitlab/git-data]

通过查找,这应该是权限不足,导致 Windows 下的 volume 映射存在一些问题。

解决方法

别人探索出目前可用的方法是采用 volume 数据卷挂载的形式。

首先先安装 Docker for Windows。并在 Setting 中设置 Shared Drives,设置一会用于挂载 docker 镜像的 volume 的磁盘。

然后初始化配置文件路径和 volume。

mkdir D:\docker\gitlab\config
mkdir D:\docker\gitlab\backups
docker volume create gitlab-logs
docker volume create gitlab-data

然后直接创建一个 Container 运行就可以了。

docker run --detach `
    --name gitlab `
    --restart always `
    --hostname localhost `
    --publish 10443:443 --publish 10080:80 --publish 1022:22 `
    --volume D:\docker\gitlab\config:/etc/gitlab `
    --volume gitlab-logs:/var/log/gitlab `
    --volume gitlab-data:/var/opt/gitlab `
    gitlab/gitlab-ce

等待一段时间初始化后,就可以访问本地的 10080 端口了,http://localhost:10080

打开后就是正常 Gitlab 的页面,重置一下 root 的密码就可以正常使用了。

使用 Docker-Compose 部署(推荐)

如果在运行 Docker 容器时需要配置很多的参数,显然一遍遍输入 docker run 会比较麻烦,这里可以采用三剑客当中的 Docker-Compose 来进行容器的管理和创建(安装 docker-ce 时默认安装)。暂时不管 Docker-Compose 的其他用法,其实就是把命令运行改成了文件运行而已。

Docker-Compose 是通过文件来创建 Docker Container 的。我们需要在一个目录下创建 docker-compose.yml 文件,写入相应的配置文件。现在我们把上面的命令进行改造:

# Compose file 版本号,和 docker 版本号对应。3 支持 docker 1.13.0+
version: "3"
# services 节点下包含多个待创建的 Docker Container
services:
  # web 节点就是待启动的 gitlab 容器
  web:
    image: gitlab/gitlab-ce:latest
    container_name: "gitlab"
    restart: always
    hostname: localhost:10080
    environment:
      TZ: "Asia/Shanghai"
      GITLAB_OMNIBUS_CONFIG: |
        gitlab_rails["time_zone"] = "Asia/Shanghai"
        gitlab_rails["gitlab_shell_ssh_port"] = 10022
        nginx["listen_port"] = 80
    ports:
      - "10080:80"
      - "10022:22"
    volumes:
      - D:\docker\gitlab\config:/etc/gitlab
      - gitlab-logs:/var/log/gitlab
      - gitlab-data:/var/opt/gitlab
volumes:
  gitlab-logs:
  gitlab-data:

可以看到这个文件的内容几乎和之前的 docker run 命令是保持一致的,唯一不同的是不需要我们自己创建 volume 了,直接在配置文件中配置后,启动时会自己为我们创建。

配置完成后,使用 docker-compose 命令运行起来。

# 打开 cmd,进入 docker-compose.yml 的根目录
# 创建容器
docker-compose up -d

#关闭容器
docker-compose stop

What's More

1. Web UI 端口显示问题

由于 Gitlab 是在 Docker 内运行的,外部需要访问的话都是需要通过端口映射的,并且一般内部端口不会和映射出来的外部端口相同。所以在用的时候可能会出现一些问题。

例如在我们例子里,22 映射到 10022,80 映射到 10080。可以看到在 Gitlab 默认的 WebUI 中,项目显示的克隆地址默认是不带端口号的,如下图所示:

 

因此在进行克隆的时候,无论是 http 还是 ssh,都需要在 url 中手动添加新的端口,例如

http://localhost:10080/root/demo.git

修改配置文件后可以直接在 WebUI 中显示正确的 url。

具体需要修改 gitlab.rb 和容器内部 /var/opt/gitlab/gitlab-rails/etc/gitlab.yml

首先修改 gitlab.rb

# 取消这条配置文件的注释,并修改为外部映射的 ssh 端口
gitlab_rails['gitlab_shell_ssh_port'] = 1022
# 使用 exec 进入容器内部
root@gitlab:/# gitlab-ctl reconfigure

再修改 /var/opt/gitlab/gitlab-rails/etc/gitlab.yml

gitlab:
  ## Web server settings (note: host is the FQDN, do not include http://)
  host: 127.0.0.1
  port: 10080 # 修改此处
  https: false
# 修改完后执行
root@gitlab:/# gitlab-ctl stop
root@gitlab:/# gitlab-ctl start

这里要注意,后面的那个配置文件是由前面那个生成的,修改 gitlab.rb 后 reconfigure,后面那个配置文件就会被重置了,注意一下修改的顺序。

显然这种方法比较麻烦,且需要进入容器中修改,一旦重启就没了。如果使用 docker-compose 来启动容器的话,可以直接在 environment 的 GITLAB_OMNIBUS_CONFIG 节点中配置,具体配置方式看上面的配置文件。

2. 镜像备份问题

由于使用的是 volume,因此 gitlab 内部的数据直接由 docker 管理了。显然就不太友好。如果有这个需求的可以阅读参考文献 2,里面提到了备份的方法。

总结

总之,Windows 对 Docker 的支持不是很友好,除了下一个学习学习,尝尝鲜,或者用于安装一些 Windows 下无法安装的软件,例如 Redis 等外,并不建议使用,显然选择 linux 系统一个是更明智的选择。

Reference

  1. GitLab Docker images
  2. Volume trouble with GitLab docker image on Windows
  3. I can not run Gitlab-ce on Docker via Windows if I set "volume" to Windows Shared Drives
  4. Gitlab 备份和迁移
<think>嗯,用户想在Ubuntu 24.04上用Docker部署GitLab。首先,我需要回顾一下之前的引用内容,看看有没有相关的步骤可以参考。引用1提到了添加阿里云的Docker仓库,这可能在安装Docker时有用。引用2是关于Docker-Compose的安装权限设置,还有验证版本。引用3则提供了一个具体的docker run命令来启动GitLab容器,包括端口映射和卷挂载。 用户现在的需求是明确的,需要一步步的指南。首先应该确保系统上安装DockerDocker-Compose。根据引用1中的命令,添加阿里云的仓库可能更适合国内用户,加快下载速度。安装Docker后,需要启动服务并设置开机自启。然后是Docker-Compose的安装,引用2中的chmod命令和版本验证很重要,确保安装正确。 接下来,部署GitLab部分,引用3中的docker run命令详细,但可能需要调整端口和卷的路径。用户可能需要注意端口冲突,比如将宿主机的20080映射到容器的80端口,避免占用默认的80。另外,挂载卷到/home/gitlab下的目录可以持久化配置、日志和数据,这很关键,避免容器重启后数据丢失。 还要考虑使用Docker-Compose来管理容器,这样更便于配置和维护。引用3中的命令可以转化为docker-compose.yml文件,这样用户只需要运行docker-compose up -d即可启动服务,方便管理。 另外,用户可能需要知道如何访问GitLab以及初始密码在哪里找。根据引用3的经验,密码存储在/etc/gitlab/initial_root_password,但挂载了本地卷的话,可能需要到宿主机的对应目录查找。此外,开放防火墙端口也是必要的,特别是如果用户是在云服务器上部署的话。 还需要注意权限问题,特别是使用--privileged=true参数,这可能涉及到容器权限的设置,需要解释清楚这个参数的作用,以及是否有必要使用。 最后,生成相关问题需要考虑用户后续可能遇到的问题,比如备份、升级、配置HTTPS或者性能优化,这些都可以作为相关问题提出,帮助用户进一步操作。</think>### Ubuntu 24.04 通过 Docker 部署 GitLab 分步指南 #### 一、安装 Docker 环境 1. **更新软件包列表** ```bash sudo apt update ``` 2. **添加阿里云 Docker 镜像源(加速下载)** 执行以下命令添加国内镜像源[^1]: ```bash sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" ``` 3. **安装 Docker 引擎** ```bash sudo apt install docker-ce docker-ce-cli containerd.io ``` 4. **启动 Docker 并设置开机自启** ```bash sudo systemctl start docker sudo systemctl enable docker ``` #### 二、安装 Docker-Compose 1. **下载并安装 Docker-Compose** ```bash sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose ``` 2. **验证安装** 输入以下命令查看版本信息[^2]: ```bash docker-compose version ``` #### 三、部署 GitLab 容器 1. **创建持久化存储目录** ```bash mkdir -p /home/gitlab/{config,logs,data} ``` 2. **使用 Docker 命令启动 GitLab** 以下命令映射了 Web 访问端口(HTTP 20080、HTTPS 20443、SSH 20022)并挂载数据卷[^3]: ```bash sudo docker run --detach \ --publish 20080:80 \ --publish 20443:443 \ --publish 20022:22 \ --name mygitlab \ --restart always \ --volume /home/gitlab/config:/etc/gitlab \ --volume /home/gitlab/logs:/var/log/gitlab \ --volume /home/gitlab/data:/var/opt/gitlab \ --privileged=true \ registry.gitlab.cn/omnibus/gitlab-jh:17.3.3 ``` **参数说明**: - `--detach`: 后台运行容器 - `--volume`: 数据持久化存储路径 - `--privileged=true`: 授予容器管理员权限(用于操作 Linux 内核功能) 3. **查看容器状态** ```bash docker logs -f mygitlab ``` #### 四、访问与配置 1. **首次访问** 等待 3-5 分钟初始化后,通过浏览器访问: ``` http://服务器IP:20080 ``` 2. **获取管理员密码** 初始密码存储在容器内,可通过以下命令查看: ```bash sudo docker exec -it mygitlab grep 'Password:' /etc/gitlab/initial_root_password ``` #### 五、防火墙配置(可选) 若服务器启用了防火墙,需放行端口: ```bash sudo ufw allow 20080/tcp sudo ufw allow 20022/tcp ``` --- ### 部署验证 通过 `docker ps` 查看容器运行状态: ```bash CONTAINER ID IMAGE STATUS PORTS a1b2c3d4e5f6 registry.gitlab.cn/omnibus/gitlab-jh:17.3.3 Up 2 minutes 0.0.0.0:20022->22/tcp, 0.0.0.0:20080->80/tcp, 0.0.0.0:20443->443/tcp ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值