docker配置遠(yuǎn)程連接
- 官方文檔里有步驟描述襟士。
- 一種方式是配置docker-daemon自己的配置文件:
- 創(chuàng)建/修改 /etc/docker/daemon.json
- 添加以下配置
{
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
}
-
如果是通過 systemctl啟動的docker.service梗摇,需要配置service 啟動參數(shù)
- 創(chuàng)建/usr/lib/systemd/system/docker.service (優(yōu)先級更高梭域,覆蓋默認(rèn)啟動)
- 添加以下配置
ExecStart= ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
- sudo systemctl daemon-reload
- sudo systemctl restart docker.service
-
遇到的坑
- 官方文檔中寫的ctp://127.0.0.1:2375只能本地訪問强经。 需要改成tcp://0.0.0.0:2375糙箍。 127.0.0.1是本地接口号枕,只能本地調(diào)用懂更。 而0.0.0.0代表本機(jī)所有網(wǎng)絡(luò)接口
- 如果以systemctl啟動docker則不能采用daemon.json的配置方式,不然會報(bào)啟動參數(shù)與配置文件沖突竹握。默認(rèn)啟動腳本是/usr/lib/systemd/system/docker.service
防火墻配置
-
centos7采用firewalld來配置防火墻稽莉,默認(rèn)不開放接口。官方文檔中給出的方案比較底層。這里我們采取自定義Service的方式來配置
- 創(chuàng)建 /etc/firewalld/services/docker.xml
- 加入以下內(nèi)容
<?xml version="1.0" encoding="utf-8"?> <service> <short>docker</short> <description>docker daemon for remote access</description> <port protocol="tcp" port="2375"/> </service>
- 查看默認(rèn)zone(一般是public) # firewall-cmd --get-default-zone
- 在zone中加入這個(gè)service # firewall-cmd --zone=public --add-service=docker --permanent
- 重新加載 # firewall-cmd --reload
docker的網(wǎng)絡(luò)原理(默認(rèn)bridge網(wǎng)絡(luò))
- 一開始我有個(gè)疑問污秆,為何docker中運(yùn)行的容器不需要防火墻配置就可以被訪問劈猪?于是深入了解下docker橋接網(wǎng)絡(luò)的原理
- 以我本地為例,運(yùn)行了兩個(gè)container
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2a6c9ab37b39 jenkins/jenkins "/sbin/tini -- /usr/…" 13 days ago Up 12 hours 0.0.0.0:50000->50000/tcp, 0.0.0.0:18080->8080/tcp jenkins
c4bf1e3daf77 registry:2 "/entrypoint.sh /etc…" 2 weeks ago Up 12 hours 0.0.0.0:15000->5000/tcp registry
- 有個(gè)叫docker-proxy的進(jìn)程會幫我們做轉(zhuǎn)發(fā)
# ps -ef | grep docker-proxy
root 1517 754 0 07:19 ? 00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 50000 -container-ip 172.17.0.2 -container-port 50000
root 1532 754 0 07:19 ? 00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 18080 -container-ip 172.17.0.2 -container-port 8080
root 1548 754 0 07:19 ? 00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 15000 -container-ip 172.17.0.3 -container-port 5000
root 5332 4555 0 19:29 pts/0 00:00:00 grep --color=auto docker-proxy
- docker啟動時(shí)會修改iptables規(guī)則良拼,在forward chain中加入自己的規(guī)則
# iptables -L -n
Chain FORWARD (policy DROP)
target prot opt source destination
DOCKER-USER all -- 0.0.0.0/0 0.0.0.0/0
DOCKER-ISOLATION-STAGE-1 all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
DOCKER all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
FORWARD_direct all -- 0.0.0.0/0 0.0.0.0/0
FORWARD_IN_ZONES_SOURCE all -- 0.0.0.0/0 0.0.0.0/0
FORWARD_IN_ZONES all -- 0.0.0.0/0 0.0.0.0/0
FORWARD_OUT_ZONES_SOURCE all -- 0.0.0.0/0 0.0.0.0/0
FORWARD_OUT_ZONES all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain DOCKER (1 references)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 172.17.0.2 tcp dpt:50000
ACCEPT tcp -- 0.0.0.0/0 172.17.0.2 tcp dpt:8080
ACCEPT tcp -- 0.0.0.0/0 172.17.0.3 tcp dpt:5000
- 順便提一下战得,firewall也是通過類似嵌入自定義鏈來實(shí)現(xiàn)的
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
INPUT_direct all -- 0.0.0.0/0 0.0.0.0/0
INPUT_ZONES_SOURCE all -- 0.0.0.0/0 0.0.0.0/0
INPUT_ZONES all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain INPUT_ZONES (1 references)
target prot opt source destination
IN_public all -- 0.0.0.0/0 0.0.0.0/0 [goto]
IN_public all -- 0.0.0.0/0 0.0.0.0/0 [goto]
Chain IN_public (2 references)
target prot opt source destination
IN_public_log all -- 0.0.0.0/0 0.0.0.0/0
IN_public_deny all -- 0.0.0.0/0 0.0.0.0/0
IN_public_allow all -- 0.0.0.0/0 0.0.0.0/0
Chain IN_public_allow (1 references)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2375 ctstate NEW
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 ctstate NEW
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306 ctstate NEW