?
This document uses PHP Chinese website manual Release
在成功安裝 Docker 并啟動(dòng) Docker 之后,dockerd
守護(hù)進(jìn)程將以其默認(rèn)配置運(yùn)行。本主題將介紹如何自定義配置,手動(dòng)啟動(dòng)守護(hù)程序以及如果遇到問題時(shí)對(duì)守護(hù)程序進(jìn)行故障排除和調(diào)試。
啟動(dòng) Docker 的命令取決于您的操作系統(tǒng)。檢查安裝 Docker 下的正確頁面。要將 Docker 配置為在系統(tǒng)引導(dǎo)時(shí)自動(dòng)啟動(dòng),請(qǐng)參閱將 Docker 配置為在引導(dǎo)時(shí)啟動(dòng)。
通常,您使用操作系統(tǒng)實(shí)用程序啟動(dòng) Docker。出于調(diào)試目的,您可以使用該dockerd
命令手動(dòng)啟動(dòng) Docker 。您可能需要使用sudo
,具體取決于您的操作系統(tǒng)配置。當(dāng)您以這種方式啟動(dòng) Docker 時(shí),它會(huì)在前臺(tái)運(yùn)行,并將其日志直接發(fā)送到您的終端。
$ dockerd INFO[0000] +job init_networkdriver()INFO[0000] +job serveapi(unix:///var/run/docker.sock)INFO[0000] Listening for HTTP on unix (/var/run/docker.sock)......
要在您手動(dòng)啟動(dòng) Docker 時(shí)停止 Docker,請(qǐng)?jiān)谀慕K端中發(fā)出一個(gè)Ctrl+C
。
守護(hù)進(jìn)程(daemon)包含許多配置選項(xiàng),您可以在手動(dòng)啟動(dòng) Docker 時(shí)將其作為標(biāo)志傳遞,或者在daemon.json
配置文件中進(jìn)行設(shè)置。推薦使用第二種方法,因?yàn)橹匦聠?dòng) Docker 時(shí),這些配置更改仍然存在。
請(qǐng)參閱 dockerd 以獲取完整的配置選項(xiàng)列表。
以下是使用一些配置選項(xiàng)手動(dòng)啟動(dòng) Docker 守護(hù)程序(daemon)的示例:
$ dockerd -D --tls=true --tlscert=/var/docker/server.pem --tlskey=/var/docker/serverkey.pem -H tcp://192.168.59.3:2376
此命令啟用 debugging(-D
),啟用 TLS(-tls
),指定服務(wù)器證書和密鑰(--tlscert
和--tlskey
),并指定守護(hù)程序偵聽連接的網(wǎng)絡(luò)接口(-H
)。
更好的方法是將這些選項(xiàng)放入daemon.json
文件并重新啟動(dòng) Docker。此方法適用于每個(gè) Docker 平臺(tái)。以下daemon.json
示例設(shè)置與上述命令相同的所有選項(xiàng):
{ "debug": true, "tls": true, "tlscert": "/var/docker/server.pem", "tlskey": "/var/docker/serverkey.pem", "hosts": ["tcp://192.168.59.3:2376"]}
Docker 文檔中會(huì)討論許多特定的配置選項(xiàng)。接下來的一些地方包括:
自動(dòng)啟動(dòng)容器
限制容器的資源
配置存儲(chǔ)驅(qū)動(dòng)程序
容器安全
您可以在守護(hù)進(jìn)程上啟用調(diào)試,以了解守護(hù)進(jìn)程的運(yùn)行時(shí)活動(dòng)并幫助進(jìn)行故障排除。如果守護(hù)進(jìn)程完全沒有響應(yīng),您還可以通過向 Docker 守護(hù)進(jìn)程(daemon)發(fā)送SIGUSR
信號(hào)來強(qiáng)制將所有線程的完整堆棧跟蹤添加到守護(hù)進(jìn)程日志中。
如果您的容器嘗試使用比系統(tǒng)可用的內(nèi)存更多的內(nèi)存,則可能會(huì)遇到內(nèi)存異常(OOME),并且容器或 Docker 守護(hù)程序(daemon)可能會(huì)被內(nèi)核 OOM 切斷器所切斷。要防止發(fā)生這種情況,請(qǐng)確保您的應(yīng)用程序在具有足夠內(nèi)存的主機(jī)上運(yùn)行,并且請(qǐng)參閱了解耗盡內(nèi)存的風(fēng)險(xiǎn)。
守護(hù)進(jìn)程(daemon)日志可以幫助您診斷問題。根據(jù)操作系統(tǒng)配置和使用的日志記錄子系統(tǒng),日志可以保存在幾個(gè)位置之一中:
操作系統(tǒng) | 位置 |
---|---|
RHEL, Oracle Linux | /var/log/messages |
Debian | /var/log/daemon.log |
Ubuntu 16.04+, CentOS | Use the command journalctl -u docker.service |
Ubuntu 14.10- | /var/log/upstart/docker.log |
macOS | ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/console-ring |
Windows | AppData\Local |
有兩種方法來啟用調(diào)試。推薦的方法是將debug
密鑰設(shè)置true
在daemon.json
文件中。此方法適用于每個(gè) Docker 平臺(tái)。
1. 編輯daemon.json
通常位于/etc/docker/
的文件。如果該文件尚不存在,您可能需要?jiǎng)?chuàng)建該文件。在 macOS 或 Windows 上,請(qǐng)勿直接編輯文件。相反,請(qǐng)轉(zhuǎn)到首選項(xiàng) / 守護(hù)進(jìn)程 / 高級(jí)。
2. 如果文件為空,請(qǐng)?zhí)砑右韵聝?nèi)容:
{ "debug": true }
如果該文件已經(jīng)包含 JSON,只需添加該鍵"debug": true
,如果它不是結(jié)束括號(hào)之前的最后一行,請(qǐng)注意在該行的末尾添加逗號(hào)。同時(shí)驗(yàn)證是否log-level
已設(shè)置密鑰,將其設(shè)置為info
或debug
。info
是默認(rèn)的,和可能的值是debug
,info
,warn
,error
,fatal
。
3. HUP
向守護(hù)程序發(fā)送信號(hào)以使其重新加載其配置。在 Linux 主機(jī)上,使用以下命令。
$ sudo kill -SIGHUP $(pidof dockerd)
在 Windows 主機(jī)上,重新啟動(dòng) Docker。您可以停止 Docker 守護(hù)進(jìn)程并使用該-D
標(biāo)志手動(dòng)重新啟動(dòng)它。但是,這可能會(huì)導(dǎo)致 Docker 以與主機(jī)的啟動(dòng)腳本創(chuàng)建的環(huán)境不同的環(huán)境重新啟動(dòng),并且這可能會(huì)使調(diào)試更加困難。強(qiáng)制要記錄的堆棧跟蹤如果守護(hù)進(jìn)程沒有響應(yīng),可以強(qiáng)制執(zhí)行完整的堆棧跟蹤通過向SIGUSR1
守護(hù)進(jìn)程發(fā)送信號(hào)進(jìn)行記錄。
Linux:
$ sudo kill -SIGUSR1 $(pidof dockerd)
Windows 服務(wù)器:
下載 docker-signal。
用--pid=<PID of daemon>
標(biāo)志運(yùn)行可執(zhí)行文件。
這將強(qiáng)制堆棧跟蹤被記錄,但不會(huì)停止守護(hù)進(jìn)程(Daemon)。如果守護(hù)進(jìn)程日志記錄到文件中,它將顯示堆棧跟蹤或包含堆棧跟蹤的文件的路徑。
守護(hù)進(jìn)程(Daemon)將在處理完SIGUSR1
信號(hào)并將堆棧跟蹤轉(zhuǎn)儲(chǔ)到日志后繼續(xù)運(yùn)行。堆棧跟蹤可用于確定守護(hù)進(jìn)程內(nèi)所有 goroutine 和線程的狀態(tài)。
檢查 Docker 是否運(yùn)行的操作系統(tǒng)無關(guān)的方法是使用該docker info
命令詢問 Docker 。
您還可以使用操作系統(tǒng)實(shí)用程序(例如sudo systemctl is-active docker
或sudo status docker
或sudo service docker status
),或者使用 Windows 實(shí)用程序檢查服務(wù)狀態(tài)。
最后,您可以dockerd
使用類似于ps
或top
的命令檢入進(jìn)程的進(jìn)程列表。