?
This document uses PHP Chinese website manual Release
本節(jié)包含配置Linux主機以更好地使用Docker的可選過程。
docker
daemon綁定到Unix套接字,而不是TCP端口。默認情況下,unix套接字由用戶擁有。root
而其他用戶只能使用sudo
...docker
守護進程總是以root
用戶。
如果你不想用sudo
當(dāng)您使用docker
命令,創(chuàng)建一個名為docker
并將用戶添加到其中。當(dāng)docker
守護進程啟動,它使unix套接字的所有權(quán)可以由docker
小組。
警告*
docker
組授予與root
用戶。有關(guān)此操作如何影響系統(tǒng)安全性的詳細信息,請參閱碼頭守護進程攻擊面...
若要創(chuàng)建docker
分組并添加用戶:
創(chuàng)建docker
小組。
$sudo群加碼頭
2. 將您的用戶添加到docker
組中。
$sudo usermod-AG docker$user
注銷并重新登錄,以便重新評估您的組成員資格。如果在虛擬機上進行測試,可能需要重新啟動虛擬機以使更改生效。在桌面Linux環(huán)境(如X Windows)上,完全退出會話并重新登錄。
2. 驗證您可以不使用運行docker
命令sudo
。
$docker運行Hello-world
該命令下載測試圖像并將其運行到容器中。當(dāng)容器運行時,它會打印一條信息消息并退出。
大多數(shù)當(dāng)前的Linux發(fā)行版(RHEL,CentOS,F(xiàn)edora,Ubuntu 16.04和更高版本)用于systemd
管理在系統(tǒng)引導(dǎo)時啟動哪些服務(wù)。Ubuntu 14.10及以下版本使用upstart
。
systemd
$ sudo systemctl enable docker
要禁用此行為,請改為使用disable
。
$ sudo systemctl disable docker
如果您需要添加HTTP代理,為Docker運行時文件設(shè)置不同的目錄或分區(qū),或進行其他自定義,請參閱自定義您的systemd Docker守護進程選項。
upstart
Docker會自動配置為在啟動時使用upstart
。要禁用此行為,請使用以下命令:
$ echo manual | sudo tee /etc/init/docker.override
chkconfig
$ sudo chkconfig docker on
有關(guān)不同存儲引擎的信息,請參閱存儲驅(qū)動程序。默認的存儲引擎和受支持的存儲引擎列表取決于您的主機的Linux發(fā)行版和可用的內(nèi)核驅(qū)動程序。
如果您的內(nèi)核早于版本3.10,或者缺少某些模塊,Docker將無法正確運行。要檢查內(nèi)核兼容性,可以下載并運行check-compatibility.sh
劇本。
$ curl https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh > check-config.sh $ bash ./check-config.sh
這個腳本只能在Linux上運行,而不是MacOS。
Cannot connect to the Docker daemon
如果您看到以下錯誤,您的Docker客戶端可能被配置為連接到另一個主機上的Docker守護進程,并且可能無法訪問該主機。
Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?
若要查看您的客戶端配置為連接到哪個主機,請檢查DOCKER_HOST
環(huán)境中的變量。
$ env | grep DOCKER_HOST
如果此命令返回值,則將Docker客戶端設(shè)置為連接到在該主機上運行的Docker守護程序。如果未設(shè)置,則將Docker客戶端設(shè)置為連接到在本地主機上運行的Docker守護程序。如果設(shè)置錯誤,請使用以下命令取消設(shè)置:
$ unset DOCKER_HOST
您可能需要在文件中編輯您的環(huán)境,如~/.bashrc
或~/.profile
以防止DOCKER_HOST
變量被錯誤地設(shè)置。
如果DOCKER_HOST
按預(yù)期設(shè)置,請驗證Docker守護進程是否運行在遠程主機上,并且防火墻或網(wǎng)絡(luò)中斷并不妨礙您連接。
如果您使用systemd-network
帶著systemd
版本219或更高版本,碼頭容器可能無法訪問您的網(wǎng)絡(luò)。一開始systemd
版本220,給定網(wǎng)絡(luò)%28的轉(zhuǎn)發(fā)設(shè)置net.ipv4.conf.<interface>.forwarding
%29默認值為脫此設(shè)置阻止IP轉(zhuǎn)發(fā)。它還與Docker的啟用net.ipv4.conf.all.forwarding
在容器內(nèi)設(shè)置。
若要在RHEL、CentOS或Fedora上處理此問題,請編輯<interface>.network
文件在/usr/lib/systemd/network/
在您的碼頭主機%28ex:/usr/lib/systemd/network/80-container-host0.network
%29并在[Network]
部分。
[Network]...IPForward=kernel # OR IPForward=true...
此配置允許按照預(yù)期從容器轉(zhuǎn)發(fā)IP。
DNS resolver found in resolv.conf and containers can't use it
使用GUI的Linux系統(tǒng)通常有一個網(wǎng)絡(luò)管理器正在運行,它使用dnsmasq
實例在環(huán)回地址上運行,如127.0.0.1
或127.0.1.1
緩存dns請求,并將此項添加到/etc/resolv.conf
...dnsmasq
服務(wù)加速DNS查詢,并提供DHCP服務(wù).。此配置在具有自己的網(wǎng)絡(luò)命名空間的Docker容器中無法工作,因為Docker容器解析回送地址,如127.0.0.1
到本身,而且它不太可能在自己的回送地址上運行DNS服務(wù)器。
如果Docker檢測到?jīng)]有在/etc/resolv.conf
是一個功能齊全的DNS服務(wù)器,會發(fā)生以下警告,Docker將使用Google提供的公共DNS服務(wù)器8.8.8.8
和8.8.4.4
用于DNS解析。
WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containers can't use it. Using default external servers : [8.8.8.8 8.8.4.4]
如果您看到此警告,請首先檢查是否使用dnsmasq
*
$ ps aux |grep dnsmasq
如果您的容器需要解析網(wǎng)絡(luò)內(nèi)部的主機,那么公共名稱服務(wù)器將是不夠的。你有兩個選擇:
可以為Docker指定要使用的DNS服務(wù)器,或
你可以禁用dnsmasq
在網(wǎng)絡(luò)管理員中。如果這樣做,NetworkManager將添加真正的DNS名稱服務(wù)器到/etc/resolv.conf
,但你將失去dnsmasq
...
您只需要使用這些方法中的一種。
配置文件的默認位置是/etc/docker/daemon.json
.可以使用--config-file
守護星旗。下面的文檔假設(shè)配置文件位于/etc/docker/daemon.json
...
創(chuàng)建或編輯Docker守護進程配置文件,默認為/etc/docker/daemon.json
文件,它控制Docker守護進程配置。
$sudo Nano/etc/docker/daemon.json
2. 加一個dns
以一個或多個IP地址作為值的密鑰。如果文件有現(xiàn)有內(nèi)容,則只需添加或編輯dns
排隊。
{“DNS”:“8.8.8.8”、“8.8.4.4”}
如果您的內(nèi)部DNS服務(wù)器無法解析公共IP地址,請至少包含一個DNS服務(wù)器,以便您可以連接到Docker Hub并使您的容器可以解析互聯(lián)網(wǎng)域名。
保存并關(guān)閉文件。
重新啟動Docker守護進程。 $sudo服務(wù)碼頭重新啟動
2. 驗證Docker可以通過嘗試提取圖像來解析外部IP地址:
$docker推出hello-world
如有必要,請驗證Docker容器可以通過對其進行ping來解析內(nèi)部主機名。$ docker run --rm -it alpine ping -c4 <my_internal_host> PING google.com(192.168.1.2):56個數(shù)據(jù)字節(jié)來自192.168.1.2的64個字節(jié):seq = 0 ttl = 41時間= 7.597 ms來自192.168的64個字節(jié)。 1.2:seq = 1 ttl = 41 time = 7.635 ms從192.168.1.2開始64字節(jié):seq = 2 ttl = 41 time = 7.660 ms從192.168.1.2開始64字節(jié):seq = 3 ttl = 41 time = 7.677 ms禁用dnsmasq
Ubuntu不要將Docker守護程序的配置更改為使用特定IP地址,請按照這些說明在NetworkManager中禁用dnsmasq
。
2. 編輯/etc/NetworkManager/NetworkManager.conf
文件。
3. 注釋掉dns=dnsmasq
行,通過添加#
字符到行的開頭。dns=dnsmasq保存并關(guān)閉文件。
4. 重新啟動NetworkManager和Docker。作為一種選擇,您可以重新啟動系統(tǒng)。
$sudo重新啟動網(wǎng)絡(luò)管理器$sudo重新啟動端口
禁用dnsmasq
在RHEL、CentOS或Fedora上:
禁用dnsmasq
服務(wù):
$sudo服務(wù)dnsmasq停止$sudo system ctl禁用dnsmasq
使用Red Hat文檔手動配置DNS服務(wù)器。
如果在運行Docker的同一臺主機上運行防火墻,并且希望從另一臺主機訪問Docker遠程API,并且啟用遠程訪問,則需要配置防火墻以允許在Docker端口上進行傳入連接,該端口默認為2376
如果啟用了TLS加密傳輸,或者2375
否則。
UFW(簡單防火墻)默認丟棄所有轉(zhuǎn)發(fā)流量和所有傳入流量。如果要從其他主機訪問Docker Remote API并且已啟用遠程訪問,則需要配置UFW以允許Docker端口上的傳入連接,2376
如果啟用TLS加密傳輸,則默認為啟用連接2375
。默認情況下,Docker在未啟用TLS的情況下運行。如果您不使用TLS,強烈建議您不要使用遠程主機訪問Docker Remote API,以防止遠程特權(quán)升級攻擊。
若要配置UFW并允許在Docker端口上進行傳入連接,請執(zhí)行以下操作:
確認UFW已啟用。
$sudo UFW狀態(tài)
如果ufw
未啟用,則其余步驟將沒有幫助。
2. 編輯UFW配置文件,它通常是/etc/default/ufw
或/etc/sysconfig/ufw
.設(shè)置DEFAULT_FORWARD_POLICY
政策ACCEPT
...
DEFAULT_FORWARD_POLICY="ACCEPT"
保存并關(guān)閉文件。
如果您需要啟用從外部主機訪問Docker Remote API并了解安全影響(請參閱此過程之前的部分),然后配置UFW以允許Docker端口上的傳入連接(即,2375
如果您不使用TLS),如果您使用則2376
。$ sudo ufw allow 2376/tcp
2. 重新加載UFW。
$ sudo ufw reload
Your kernel does not support cgroup swap limit capabilities
在Ubuntu或Debian主機上,使用圖像時可能會看到與以下內(nèi)容類似的消息。
WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.
在基于RPM的系統(tǒng)上不會發(fā)生此警告,默認情況下啟用這些功能。
如果您不需要這些功能,則可以忽略該警告。按照這些說明,您可以在Ubuntu或Debian上啟用這些功能。即使Docker沒有運行,內(nèi)存和交換會計也會產(chǎn)生大約1%的總可用內(nèi)存開銷和10%的整體性能下降。
以用戶身份登錄Ubuntu或Debian主機sudo
特權(quán)。
2. 編輯/etc/default/grub
文件。添加或編輯該GRUB_CMDLINE_LINUX
行以添加以下兩個鍵值對:
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
保存并關(guān)閉文件。
更新GRUB。 $sudo更新-GRUB 如果GRUB配置文件的語法不正確,則會發(fā)生錯誤。在本例中,重復(fù)步驟3和4。 這些更改將在重新啟動系統(tǒng)時生效。下一步
2. 繼續(xù)用戶指南...
Docker,Docker文檔,需求,apt,安裝,ubuntu,安裝,卸載,升級,更新