docker-ce - 更改默认 docker0 网桥 IP 地址
问题描述
在 Ubuntu Server 16.04 上启动 docker-ce (18.06.1-ce, build e68fc7a) 后,创建如下:
$ ifconfig
docker0 Link encap:Ethernet HWaddr 02:42:fe:36:81:72
inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
不幸的是,我的电脑在这个网络上。这意味着一旦 docker 启动,我就会失去与服务器的 ssh 连接。
尝试 1
几个论坛都说要添加以下内容/etc/docker/daemon.json
:
{
"bip": "192.168.1.1/24"
}
尝试 2,使用这个 SO 接受的答案
一种可行的解决方案正在运行:
sudo ip addr add dev docker0 192.168.1.1/24
sudo ip addr del dev docker0 172.17.0.1/16
资料来源:forums.docker.com
虽然这是一个可能的解决方案,但我必须在 docker 服务启动后才这样做。我不能做的事情,因为我同时失去了连接。
尝试 3,遵循@Light.G 的回答
添加-bip
toExecStart
行后,尝试启动 docker 给出(journalctl -xe):
-- Unit docker.socket has begun starting up.
Sep 11 11:13:19 PTLISLABHLC01 systemd[1]: Listening on Docker Socket for the API.
-- Subject: Unit docker.socket has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit docker.socket has finished starting up.
--
-- The start-up result is done.
Sep 11 11:13:19 PTLISLABHLC01 systemd[1]: docker.service: Start request repeated too quickly.
Sep 11 11:13:19 PTLISLABHLC01 systemd[1]: Failed to start Docker Application Container Engine.
-- Subject: Unit docker.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit docker.service has failed.
--
-- The result is failed.
Sep 11 11:13:19 PTLISLABHLC01 systemd[1]: docker.socket: Unit entered failed state.
Sep 11 11:13:19 PTLISLABHLC01 polkitd(authority=local)[1062]: Unregistered Authentication Agent for unix-process:15666:32644036 (system bus name :1.56, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8) (disconnected from bus)
这里唯一的错误是你应该使用--bip
而不是-bip
. 检查接受的答案!
解决方案
不需要额外的实体:
- 在启动 Docker 之前编辑 /lib/systemd/system/docker.service。
--bip "192.168.1.1/24"
在行尾添加ExecStart=/usr/bin/dockerd
。 systemctl daemon-reload
systemctl start docker
使用 Docker 17.03-ce 在 Ubuntu 16.04 上测试。
2018-09-13 编辑:
由于我们可能仍需要用户定义的桥接网络,因此仍然存在潜在问题。
默认情况下,网桥会分配一个范围为 172.[17-31].0.0/16 或 192.168.[0-240].20/20 的子网,该子网不与任何现有接口重叠。与默认桥接网络不同,用户定义的网络支持手动 IP 地址和子网分配。如果没有给出分配,那么 Docker 的默认 IPAM 驱动程序会分配私有空间中的下一个可用子网。
尽管他们说它不会与主机上的任何现有接口重叠,但您仍然遇到了这样的问题。因此,如果您需要用户定义的桥接网络,您最好为它们分配特定的子网。据我所知,没有用于自定义 IPAM 驱动程序默认池的参数。
推荐阅读
- javascript - js中一次输入多个字符
- c - 如何阻止 Cocoapods 在伞中导入私有 Headders
- azure - 使用 Select-Object 更改属性的数据类型并添加计算属性
- vue.js - 观察两个变量,只有在两者都被改变时才触发?VueJs
- google-apps-script - 通过 Google Apps 脚本将电子表格发布为网络应用程序
- java - jooq中带有外键和主键的重复表
- javascript - SharePoint 2013 在选定列表项上设置是/否字段(如果/否则)使用 JS
- android - AAPT:错误:未找到属性 layout_constraintStart_toBottomOf
- php - 如何切换我的 wordpress /apache2 将使用的 php 版本?
- java - android studio java中的简单登录表单中的错误