標籤 docker 下的所有文章

Docker stop 後,restart 時,要再進入容器中再重啟服務

在本機端使用 Docker 開發時,要注意如果 stop container 後,可能會造成容器中的服務出錯,需要在重啟容器後,進入容器再重啟該服務。

ben@ben-UX305CA:~/docker$ docker exec -ti ben_centos69 bash
[root@ed4204fc441e /]# service httpd status
httpd dead but pid file exists
[root@ed4204fc441e /]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
[root@ed4204fc441e /]# service mysqld restart
Stopping mysqld:                                           [FAILED]
Starting mysqld:                                           [  OK  ]
[root@ed4204fc441e /]# service mysqld restart
Stopping mysqld:                                           [  OK  ]
Starting mysqld:                                           [  OK  ]
[root@ed4204fc441e /]#

至於為什麼會 stop 或 restart,因為不是在正式環境中佈署,而是在開發機上操作,有時會面臨重開電腦的需求。

同步Host和Docker container內的用戶uid

當使用 Docker container 進行開發時,通常會 mount 一個本機端的資料夾給 container,但這會造成 Host 和 Client 資料夾擁有人:群組的錯亂,除了強制給資料夾 777 權限外,也可以同步本機端和 Docker container 裡的用戶名稱和 uid,以解決這個問題。

首先在Host端,查詢使用者名稱和uid


ben@ben-UX305CA:~$ sudo -i
[sudo] password for ben:
root@ben-UX305CA:~# cat /etc/passwd
ben:x:1000:1000:ben,,,:/home/ben:/bin/bash

 

然後進入 Docker,增加一個同名的用戶,並手動指定 uid


useradd ben -u 1000

此時在 Host 本機端和 Docker container 裡的用戶具有相同的名稱和 uid,所以對應到所 mount 的資料時,就不需要另外去調整權限。

然後我們在本機端開發時,預設是使用ben這個用戶,所以存檔後的權限為ben。因為我們設定好了 container 內的用戶名稱,所以在 container 內的權限也是ben,連uid也是相同的。

下圖在本機端使用Sublime Text 3增加檔案存檔後的結果,進入docker container 也是相同的用戶和權限


ben@ben-UX305CA:~/docker/ben_centos69/httpd$ ll
總計 36
drwxrwxr-x 2 ben ben 4096 5月 8 11:25 ./
drwxrwxr-x 4 ben ben 4096 5月 6 23:09 ../
-rw-rw-r-- 1 ben ben 45 5月 8 11:11 centos69.sublime-project
-rw-rw-r-- 1 ben ben 16293 5月 8 11:11 centos69.sublime-workspace
-rw-rw-r-- 1 ben ben 56 5月 8 11:25 for.php
-rw-r--r-- 1 ben ben 43 5月 6 23:13 index.php

另外,如果要刪除用戶時 (連同家目錄也刪除)


userdel -r ben

但仍要手動刪除用戶的 mail box


rm -R /var/spool/mail