docker使用問題總結

問題一:鏡像數據問題
由於容器重啓後數據會被清空,所以docker中的數據需要通過映射存放到本地磁盤持久化,啓動docker鏡像的時候加-v diskPath:dockerPath的參數。例如:

docker run -d -e MYSQL_ROOT_PASSWORD=admin --name mysql -v /opt/data/mysql:/var/lib/mysql -p 3306:3306 mysql

問題二. 容器中的時區與語言的問題

在docker容器中默認時間是UTC時間,北京是+8時區。默認語言爲POSIX,則需在編譯docker image的時候需要指定語言和時區的環境變量:
ENV LC_ALL en_US.UTF-8,ENV TZ=Asia/Shanghai

問題三 docker 容器中systemctl問題
在容器中使用systemctl報Failed to get D-Bus connection: Operation not permitted的錯誤,則在啓動的時候把sys/fs/cgroup映射到docker容器中。

docker run --privileged --name=test --hostname=test -v /sys/fs/cgroup:/sys/fs/cgroup image /usr/sbin/init

問題四 docker容器存放問題(最坑)

默認情況下Docker的存放位置爲:/var/lib/Docker。一般根下分區我們不會給太大。鏡像和容器越存越多一般我們有兩種解決方法

1、掛載大分區到/var/lib/docker:

一般選擇建立邏輯分區lvm,方便後期擴展集體。
	a.建立新分區,並格式化
		PS: 以下操作建設你已經有現成的卷組,直接可以劃邏輯卷。或者你可以自己創建邏輯卷,或者不適用邏輯卷直接使用分區
		lvcreate -L 300G lv_docker vg_home  
		mkfs.ext4 /dev/vg_home/lv__docker  
	b.掛載新分區到臨時掛載點
		mkdir /mnt/docker  
		mount /dev/vg_home/lv_docker /mnt/docker/  

	c.停掉docker後拷貝/var/lib/docker下數據到臨時掛載點
		service docker stop  
		cp -r /var/lib/docker/* /mtn/docker  

	d.修改/var/lib/docker 爲//var/lib/docker.bak,並創建/var/lib/docker
		mv /var/lib/docker{,.bak}  
		mkdir /var/lib/docker  

	e.掛載新分區到/var/lib/docker,並設置開機自動掛載。
		mount /dev/vg_home/lv_docker /var/lib/docker  
		vim /etc/fstab  
		---  
		/dev/vg_home/lv_docker /docker_data   ext4    defaults 0 0  
		----   

	f.檢測docker是否可用,數據是否完整
		docker images  
		docker ps -a   

	g.確認無誤後卸載臨時掛載點,刪除/var/lib/docker.bak
		umount /mnt/docker  
		rm -rf /var/lib/docker.bak  

2、修改鏡像和容器的存放路徑:

	a.很簡單,指定鏡像和容器存放路徑的參數是--graph=/var/lib/docker。只需要修改配置文件指定啓動參數即可
		vim /etc/sysconfig/docker  
		------------  
		other_args="--graph=/docker"  
		------------  

	b.停掉docker 
		service docker stop  
	c.備份數據到新容器存放目錄
		cp -r /var/lib/docker /docker/  

	d.修改源存放目錄名稱
		mv /etc/lib/docker{,.bak}  

	e.啓動docker
		service docker start

	f.測試
		docker images  
		docker ps -a
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章