前言#
雖然使用 docker 部署容器實作所需邀的功能非常友善,但是這是建立在 docker 部署容器時的設定完善的情況下。
部署容器時有一點不可避免:固定容器 IP 。
如果沒有固定配置設定的 IP ,容器提供的服務将是不可靠的:
- 每次主機重新開機時,如果容器沒有固定 IP ,容器的 IP 将由啟動順序決定。這将導緻類似無法遠端通路資料庫等等情況時,發送錯誤的請求,進而使得服務提供失敗。
建立自定義網絡#
預設的
docker0
網絡是不支援容器固定 IP 到該網段的,必須先建立一個自定義網絡,才能固定容器 IP 到這個自定義網絡中。
- 否則報錯:Copy
Failure
user specified IP address is supported on user defined networks only
指令行建立#
- 格式:Copy
sudo docker network create --subnet=[自定義網絡廣播位址]/[子網路遮罩位數] [自定義網絡名]
- 示例:Copy
sudo docker network create --subnet=172.20.0.0/24 yogile0
-
:設定前 24 位為網絡位,後 8 位為主機位,該網段可用 IP 位址:--subnet
到172.20.0.1
。172.20.0.254
- 檢視更多參數:Copy
sudo docker network create --hlelp
Portainer 圖形化建立#
-
Portainer 中,點選 “Networks” 即可看到網絡清單。
- 點選 “Add network” 開始建立網絡。
- 最簡單的網絡建立需要示例:
- 最簡單的網絡建立隻需要
和Name
資訊,更多設定同指令行幫助。Subnet
-
:如果不填預設網關為首位可用主機名(這裡是 172.20.0.1)。Gateway
- 點選最下面的 “Create the network” 即可完成建立網絡。
- 回到 “Networks” 即可看到網絡清單中多出了網絡
yogile0
。
固定容器 IP#
指令行固定#
- 簡單格式:
-
注意:“標明網絡下固定 IP 位址” 不可是網關位址。
如果設定網絡時,不填網關,預設為首位可用主機名(這裡是 172.20.0.1)
sudo docker run -it --name [容器名] --net [網絡名] --ip [標明網絡下固定 IP 位址] ubuntu:latest /bin/bash
- 示例:Copy
sudo docker run -it --name network-test --net yogile0 --ip 172.20.0.2 ubuntu:latest /bin/bash
Portainer 圖形化固定#
- 建立容器,或者進入一個容器的管理界面時,在 “Advanced container settings -> Network” 中設定固定 IP 。
- 填寫網絡資訊。
-
:選擇目标網絡名。Network
-
:輸入容器網絡名。Hostname
-
:可設定容器域名。Domain Name
-
:設定固定 IP 位址。IPv4 Address
- 其他選項可以按需填寫。
- 部署容器。
-
可以看到容器清單中出現建立的容器。