給docker配置指定ip的超詳細圖解
本文主要使用docker network進行ip的配置(本文主要使用一個容器來試驗)
1、創(chuàng)建一個簡單容器,并查看它的詳細信息
1.1 創(chuàng)建容器

1.2 查看IP信息

?2、查看docker 網(wǎng)絡信息
2.1 查看docker網(wǎng)絡列表

圖中bridge是我這里docker的默認橋接網(wǎng)絡,通過查看網(wǎng)絡詳細信息我們可以發(fā)現(xiàn),我們的test容器使用的是bridge如下:
[root@192 ~]# docker network inspect bridge
[
{
"Name": "bridge",
"Id": "40b01687a277bf4622dc67bd454eb1f9d6bbab6bf0c547843254c852b680661d",
"Created": "2023-06-16T20:22:32.094125218+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Containers": {
"b015805631839406a7ef4ced2b2cd810dc6b7a08d26f02792858598eec436a46": {
"Name": "test",
"EndpointID": "d4ddc395b7185a61b0a4008f28286c74bf701493357225656a363bfe8f80e99c",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
}
},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]而我們嘗試修改test的ip時,系統(tǒng)會指出“用戶指定的IP地址僅在用戶定義的網(wǎng)絡上支持”,如下圖:

所以如果我們要指定容器的ip,我們就要使用自己定義的網(wǎng)絡。(同時,當我們使用自己定義的網(wǎng)絡但是沒有分配指定ip的時候,ip的分配將由容器依照容器啟動的順序,在對應的網(wǎng)段內(nèi)從2開始往后分配)。
3、自定義容器網(wǎng)絡
docker network create --driver bridge --subnet 172.18.0.0/16 --gateway 172.18.0.1 test
--driver 設置網(wǎng)絡模式, bridge 為橋接模式(可以不寫,默認為橋接)
Docker有四種網(wǎng)絡模式
host:容器和主機共享一個網(wǎng)絡。
container:容器和另外一個容器共享一個網(wǎng)絡。
none:不進行網(wǎng)絡連接。
bridge:默認配置,橋接模式。
--subnet 設置網(wǎng)段(可以不寫,默認為當前所有網(wǎng)段中數(shù)值上最大的網(wǎng)段+1的網(wǎng)段,比如當前數(shù)值上最大的網(wǎng)段是172.20.0.0/16,則不寫的話默認為172.21.0.0/16)
172.18.0.0/16 主機部分全0
--getway 設置網(wǎng)關(可以不寫,不寫的話,就沒有)
172.18.0.1 一般是主機部分的數(shù)值從1開始遞增,有n個網(wǎng)關,按理就是172.18.0.2
到172.18.0.n(n<256)
4、配置ip

此時ip為空是因為當前容器還沒有打開,只有當容器打開的時候,docker才會開始給容器分配ip,而當ip沒有被定義的時候,一般ip默認是從2開始依次遞增(一般網(wǎng)關主機部分的數(shù)值是1)。
ps:docker自動分配是基于當前網(wǎng)絡中的ip的,而我們自定義ip是固定的,也就是說,如果你定義了172.18.0.2這個ip,而當有一個容器的ip是由docker自動分配的時候,此時如果自定義ip的容器沒開啟的話,docker分配的ip依舊是從172.18.0.2開始,而因為這兩個ip相同,所以如果先開啟docker自動分配ip的容器,我們自定義ip的容器在開啟的時候就會發(fā)生ip沖突從而啟動失敗。

5、測試
我們從起docker再打開test查看進行測試

如此,我們就配好固定ip啦
6、常見問題
| 序號 | 報錯 | 翻譯 | 理由 | 解決方法 |
|---|---|---|---|---|
| 1 | Error response from daemon: User specified IP address is supported on user defined networks only | 來自守護進程的錯誤響應:用戶指定的IP地址僅在用戶定義的網(wǎng)絡上支持 | 我們只能指定在我們自定義的網(wǎng)絡上支持的IP | 無,但是如果只是為了配置固定ip,可以自定義網(wǎng)絡進行配置 |
| 2 | Error response from daemon: Address already in use | ip地址已在被使用 | 1、自定義的ip已被分配,可能是自動分配的時候分配掉的 2、在修改容器ip時,如果容器此時開著,并且修改的網(wǎng)段與當前網(wǎng)段一致,也會有可能出現(xiàn)這個問題 | 1、先開啟自定義ip的容器 2、先關閉容器,并斷開網(wǎng)段,否則修改可能會不起作用。 |
6.1 ip無法被自定義

6.2 ip沖突

6.3 等等等系列問題……
錯誤待開發(fā)
總結
到此這篇關于給docker配置指定ip的文章就介紹到這了,更多相關docker配置指定ip內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
在Docker中如何配置網(wǎng)絡并訪問互聯(lián)網(wǎng)
這篇文章主要介紹了在Docker中如何配置網(wǎng)絡并訪問互聯(lián)網(wǎng)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01
使用docker輕松幾步打造個人專屬圖床的實現(xiàn)步驟
本文主要介紹了使用docker打造個人專屬圖床的實現(xiàn)步驟,可以快速搭建屬于您自己的圖床,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧2025-02-02
使用rpm安裝指定版本docker(1.12.6)的詳細步驟
為了防止安裝高版本的docker引發(fā)的錯誤,需要安裝1.12.6版本的docker,下面小編給大家?guī)砹耸褂胷pm安裝指定版本的docker(1.12.6)的步驟,感興趣的朋友一起看看吧2021-08-08
使用Docker部署MySQL數(shù)據(jù)庫的兩種方法
在現(xiàn)代軟件開發(fā)中,MySQL 是一種流行的關系數(shù)據(jù)庫管理系統(tǒng),因其可靠性和易用性受到廣泛歡迎,通過 Docker,可以快速、便捷地部署和管理 MySQL 數(shù)據(jù)庫實例,本文將介紹兩種通過 Docker 部署 MySQL 的方法,需要的朋友可以參考下2024-10-10

