前言
故事發生在一個夜黑風高的晚上,一通看著不怎麼尋常的電話過來,說是業務趕著上線,但他們的API包上傳不了到公司的maven私庫,領導叫我支撐下看怎麼解決。經過多年不怎麼靠譜的直覺,應該是磁碟滿了。於是利索地敲下
df -lh
果然磁碟滿了,其中/var/lib/docker/overlay 這個玩意兒基本上把磁碟佔滿。接著輸入
docker system df
檢視docker所佔的磁碟大小。在思考是申請流程單叫運維擴容下磁碟,還是手動清理下磁碟的時候,電話再次過來,說找到問題沒,能不能趕緊解決。接完電話後,心情莫名煩躁,於是敲下了如下命令
docker system prune
這個命令可以用於清理磁碟,刪除關閉的容器、無用的資料卷和網路,以及dangling映象(即無tag的映象)。接著一通電話又過來,說gitlab訪問不了,我當時給的答案是磁碟滿了,gitlab應該是停止了,我稍等重啟下gitlab容器,就在我打算重啟gitlab時,敲下命令
docker ps -a
想撈一下gitlab容器,然後完犢子了,docker ps -a 看不到任何容器。因為之前gitlab的容器是前架構師安裝,我壓根就不清楚他當時是以什麼形式安裝,於是就把這個問題反饋給領導,通過領導拿到當時啟動gitlab的docker-compose.yml.樣例如下
version: '2'
services:
redis:
restart: always
container_name: gitlab_redis
image: sameersbn/redis:latest
command:
- --loglevel warning
volumes:
- /usr/local/docker/gitlab/redis:/var/lib/redis:Z
network_mode: bridge
postgresql:
restart: always
container_name: gitlab_postgresql
image: sameersbn/postgresql:9.6-2
volumes:
- /usr/local/docker/gitlab/postgresql:/var/lib/postgresql:Z
environment:
- DB_USER=gitlab
- DB_PASS=password
- DB_NAME=gitlabhq_production
- DB_EXTENSION=pg_trgm
network_mode: bridge
gitlab:
restart: always
container_name: gitlab
image: sameersbn/gitlab:10.4.2-1
links:
- redis
- postgresql
network_mode: bridge
ports:
- "10080:80"
- "10022:22"
volumes:
- /usr/local/docker/gitlab/gitlab:/home/git/data:Z
environment:
- DEBUG=false
- DB_ADAPTER=postgresql
- DB_HOST=postgresql
- DB_PORT=5432
- DB_USER=gitlab
- DB_PASS=password
- DB_NAME=gitlabhq_production
- REDIS_HOST=redis
- REDIS_PORT=6379
- TZ=Asia/Shanghai
- GITLAB_TIMEZONE=Beijing
- GITLAB_HTTPS=false
- SSL_SELF_SIGNED=false
- GITLAB_HOST=gitlab.common.com
- GITLAB_PORT=
- GITLAB_SSH_PORT=10022
- GITLAB_RELATIVE_URL_ROOT=
看了一下檔案,我看到有做檔案目錄掛載,然後我就去掛載的檔案目錄下,看檔案有沒有在,還好檔案都在,於是我就放心敲下
docker-compose -f gitlab.yml up -d
這命令一敲下,覆盤之路華麗的拉開了序幕...
正文
在我敲下命令,看到容器都顯示正常啟動,打算繼續清理磁碟之時,突然微信接到好幾個開發人員的資訊,說他們gitlab登陸,都顯示使用者或者密碼無效,於是我也用我的賬號,我的賬號可是管理員賬號,哈哈,一股王八之氣,在介面上輸入我那耳熟能詳的使用者名稱和密碼,出乎意料的提示我的使用者名稱或者密碼無效,心裡莫名有點慌,感覺我幹了一件挺了不得的大事。
事情有點超出我的認知,在我看來如果有做了掛載,正常不會出現資料丟失才對,於是就找朋友救急,後面和他交流一下,就是先用備份資料還原,如果有備份的話。然後我在掛載gitlab的目錄下,看到backups目錄,看到裡面的tar,突然有一種挖到寶藏的感覺,但寶藏有了,開寶藏的鑰匙在哪裡,我要如何把備份的資料恢復回來呢。因為我對sameersbn也不瞭解,於是就去他們的github找了下,他們的github連結如下
https://github.com/sameersbn/docker-gitlab
通過他們的github找到如下介紹
When using docker-compose you may use the following command to execute the restore.
docker-compose run --rm gitlab app:rake gitlab:backup:restore # List available backups
docker-compose run --rm gitlab app:rake gitlab:backup:restore BACKUP=1515629493_2020_12_06_13.10.0 # Choose to restore from 1515629493
照貓畫虎,敲下如下命令
docker-compose -f gitlab.yml run --rm gitlab app:rake gitlab:backup:restore
大約過了一首歌的時間,我再次開啟gitlab登入介面,懷著忐忑的心情,輸入使用者名稱密碼,很驚喜的發現登入成功了,看一下倉庫,都還在
總結
羅裡吧嗦說了一堆,其實總結出來就幾句話,就是備份,備份,備份,重要的事情說三遍,其次在做一些可能刪資料或者改變資料的命令,要小心,小心,再小心。最後遇到問題,如果谷歌百度都找不到答案,記得去官方網站或者他們的github網站找找答案,比如sameersbn-gitlab連結
https://github.com/sameersbn/docker-gitlab