在為客戶使用docker運行php-fpm的時候,發現有的可以正常連接服務器,有的不可以。經過診斷發現客戶端的ip網段和docker創建的默認docker0網卡網段沖突。
docker0默認的網絡一般都是172.17.0.1/24或192.168.0.1/24。如果客戶端的ip是172.17.111.1,則這時候訪問基于docker部署的應用的時候,會遇到網絡問題。
解決的方案,有兩種。
1:使用host模式運行docker,但是需要刪除默認的docker0虛擬網卡。在下次docker daemon重新啟動的時候,又會重新創建這個docker0的虛擬網卡。
2:另一種解決方式,就是修改默認的docker0網絡配置,使用另外的網段給docker使用。
如下步驟,是基于方案二的解決步驟,親測可行。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
#停止docker服務器,并刪除docker0網卡 sudo systemctl restart docker sudo ip link set dev docker0 down sudo brctl delbr docker0 # 創建自定義bridge0網絡,網段為10.255.254.1/24 sudo brctl addbr bridge0 sudo ip addr add 10.255.254.1 /24 dev bridge0 sudo ip link set dev bridge0 up #sudo ip link set dev bridge0 down ; sudo brctl delbr bridge0 # 確認網卡已經運行 ip addr show bridge0 # 創建docker運行的配置文件(如果文件夾不存在,手工創建) sudo mkdir /etc/systemd/system/docker .service.d sudo vi /etc/systemd/system/docker .service.d /docker .conf ##輸入如下內容 echo "[Service] EnvironmentFile=- /etc/sysconfig/docker ExecStart= ExecStart= /usr/bin/dockerd $OPTIONS \ $DOCKER_STORAGE_OPTIONS \ $DOCKER_NETWORK_OPTIONS \ $BLOCK_REGISTRY \ $INSECURE_REGISTRY" > /etc/systemd/system/docker .service.d /docker .conf # 修改docker服務啟動默認綁定網卡為bridge0 echo 'DOCKER_NETWORK_OPTIONS="-b=bridge0"' >> /etc/sysconfig/docker sudo systemctl daemon-reload sudo systemctl restart docker |
參考鏈接:
https://opskumu.gitbooks.io/docker/content/chapter6.html
https://docs.docker.com/engine/admin/systemd/#custom-docker-daemon-options