Windows Docker 安裝 Gitlab Volume權(quán)限問(wèn)題解決方案
記錄一下 Windows10 下 Docker 安裝 Gitlab 的步驟。
Caution: We do not officially support running on Docker for Windows. There are known issues with volume permissions, and potentially other unknown issues. If you are trying to run on Docker for Windows, please see our getting help page for links to community resources (IRC, forum, etc) to seek help from other users.
首先,Gitlab 官方是不支持 Windows 下部署 Gitlab 鏡像的,所以正常的 Gitlab 服務(wù)還是部署在 Linux 上比較好。本地部署只是用于個(gè)人開(kāi)發(fā)測(cè)試環(huán)境。
問(wèn)題描述
其實(shí)搭建 Gitlab 本省是一件很簡(jiǎn)單的事情,直接 pull 官方的 Gitlab 鏡像開(kāi)起來(lái)就可以用了。
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 配置成本地路徑運(yùn)行后會(huì)出現(xiàn)一下錯(cuò)誤:
Error executing action create on resource 'storage_directory[/var/opt/gitlab/git-data]
通過(guò)查找,這應(yīng)該是權(quán)限不足,導(dǎo)致 Windows 下的 volume 映射存在一些問(wèn)題。
解決方法
別人探索出目前可用的方法是采用 volume 數(shù)據(jù)卷掛載的形式。
首先先安裝 Docker for Windows。并在 Setting 中設(shè)置 Shared Drives,設(shè)置一會(huì)用于掛載 docker 鏡像的 volume 的磁盤(pán)。
然后初始化配置文件路徑和 volume。
mkdir D:\docker\gitlab\config mkdir D:\docker\gitlab\backups docker volume create gitlab-logs docker volume create gitlab-data
然后直接創(chuàng)建一個(gè) Container 運(yùn)行就可以了。
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
等待一段時(shí)間初始化后,就可以訪問(wèn)本地的 10080 端口了,http://localhost:10080
打開(kāi)后就是正常 Gitlab 的頁(yè)面,重置一下 root 的密碼就可以正常使用了。
使用 Docker-Compose 部署(推薦)
如果在運(yùn)行 Docker 容器時(shí)需要配置很多的參數(shù),顯然一遍遍輸入 docker run 會(huì)比較麻煩,這里可以采用三劍客當(dāng)中的 Docker-Compose 來(lái)進(jìn)行容器的管理和創(chuàng)建(安裝 docker-ce 時(shí)默認(rèn)安裝)。暫時(shí)不管 Docker-Compose 的其他用法,其實(shí)就是把命令運(yùn)行改成了文件運(yùn)行而已。
Docker-Compose 是通過(guò)文件來(lái)創(chuàng)建 Docker Container 的。我們需要在一個(gè)目錄下創(chuàng)建 docker-compose.yml 文件,寫(xiě)入相應(yīng)的配置文件。現(xiàn)在我們把上面的命令進(jìn)行改造:
# Compose file 版本號(hào),和 docker 版本號(hào)對(duì)應(yīng)。3 支持 docker 1.13.0+ version: "3" # services 節(jié)點(diǎn)下包含多個(gè)待創(chuàng)建的 Docker Container services: # web 節(jié)點(diǎn)就是待啟動(dòng)的 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:
可以看到這個(gè)文件的內(nèi)容幾乎和之前的 docker run 命令是保持一致的,唯一不同的是不需要我們自己創(chuàng)建 volume 了,直接在配置文件中配置后,啟動(dòng)時(shí)會(huì)自己為我們創(chuàng)建。
配置完成后,使用 docker-compose 命令運(yùn)行起來(lái)。
# 打開(kāi) cmd,進(jìn)入 docker-compose.yml 的根目錄 # 創(chuàng)建容器 docker-compose up -d #關(guān)閉容器 docker-compose stop
What's More
1. Web UI 端口顯示問(wèn)題
由于 Gitlab 是在 Docker 內(nèi)運(yùn)行的,外部需要訪問(wèn)的話都是需要通過(guò)端口映射的,并且一般內(nèi)部端口不會(huì)和映射出來(lái)的外部端口相同。所以在用的時(shí)候可能會(huì)出現(xiàn)一些問(wèn)題。
例如在我們例子里,22 映射到 10022,80 映射到 10080。可以看到在 Gitlab 默認(rèn)的 WebUI 中,項(xiàng)目顯示的克隆地址默認(rèn)是不帶端口號(hào)的,如下圖所示:
因此在進(jìn)行克隆的時(shí)候,無(wú)論是 http 還是 ssh,都需要在 url 中手動(dòng)添加新的端口,例如
http://localhost:10080/root/demo.git
修改配置文件后可以直接在 WebUI 中顯示正確的 url。
具體需要修改 gitlab.rb 和容器內(nèi)部 /var/opt/gitlab/gitlab-rails/etc/gitlab.yml。
首先修改 gitlab.rb
# 取消這條配置文件的注釋?zhuān)⑿薷臑橥獠坑成涞?ssh 端口 gitlab_rails['gitlab_shell_ssh_port'] = 1022 # 使用 exec 進(jìn)入容器內(nèi)部 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 # 修改完后執(zhí)行 root@gitlab:/# gitlab-ctl stop root@gitlab:/# gitlab-ctl start
這里要注意,后面的那個(gè)配置文件是由前面那個(gè)生成的,修改 gitlab.rb 后 reconfigure,后面那個(gè)配置文件就會(huì)被重置了,注意一下修改的順序。
顯然這種方法比較麻煩,如果使用 docker-compose 來(lái)啟動(dòng)容器的話,可以直接在 environment 的 GITLAB_OMNIBUS_CONFIG 節(jié)點(diǎn)中配置。
2. 鏡像備份問(wèn)題
由于使用的是 volume,因此 gitlab 內(nèi)部的數(shù)據(jù)直接由 docker 管理了。顯然就不太友好。如果有這個(gè)需求的可以閱讀參考文獻(xiàn) 2,里面提到了備份的方法。
總結(jié)
總之,Windows 對(duì) Docker 的支持不是很友好,除了下一個(gè)學(xué)習(xí)學(xué)習(xí),嘗嘗鮮,或者用于安裝一些 Windows 下無(wú)法安裝的軟件,例如 Redis 等外,并不建議使用,顯然選擇 linux 系統(tǒng)一個(gè)是更明智的選擇。
Reference
- GitLab Docker images
- Volume trouble with GitLab docker image on Windows
- I can not run Gitlab-ce on Docker via Windows if I set "volume" to Windows Shared Drives
- Gitlab 備份和遷移
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Win10 系統(tǒng)下快速搭建mxnet框架cpu版本
這篇文章主要介紹了Win10 系統(tǒng)下快速搭建mxnet框架cpu版本,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10鴻蒙HarmonyO開(kāi)發(fā)實(shí)戰(zhàn)-Web組件中的Cookie及數(shù)據(jù)存儲(chǔ)
Cookie是一種存儲(chǔ)在用戶計(jì)算機(jī)上的小文本文件,用于在用戶訪問(wèn)網(wǎng)站時(shí)存儲(chǔ)和提取信息,它由網(wǎng)站服務(wù)器發(fā)送到用戶的瀏覽器,并存儲(chǔ)在用戶的計(jì)算機(jī)上,每當(dāng)用戶訪問(wèn)該網(wǎng)站時(shí),瀏覽器將發(fā)送該Cookie回服務(wù)器,以用于識(shí)別用戶和存儲(chǔ)用戶的首選項(xiàng)和其他信息2024-06-06紅帽RedHat 8.0新特性(網(wǎng)絡(luò)、yum源、Web界面管理等)
這篇文章主要介紹了紅帽RedHat 8.0新特性(網(wǎng)絡(luò)、yum源、Web界面管理等),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02華為鴻蒙DevEco studio2.0的安裝和hello world運(yùn)行教程
這篇文章主要介紹了關(guān)于華為鴻蒙DevEco studio2.0的安裝和運(yùn)行第一個(gè)hello world的文章教程詳解,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-09-09windows linux兩個(gè)系統(tǒng)修改默認(rèn)啟動(dòng)項(xiàng)
這篇文章主要介紹了windows linux兩個(gè)系統(tǒng)修改默認(rèn)啟動(dòng)項(xiàng),需要的朋友可以參考下2007-02-02如何讓W(xué)indowsForm縮小到系統(tǒng)匣過(guò)程詳解
這篇文章主要介紹了讓W(xué)indowsForm縮小到系統(tǒng)匣過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09