在Ubuntu Server 16.04上启动docker-ce(18.06.1-ce,构建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)
Run Code Online (Sandbox Code Playgroud)
不幸的是,我的PC在此网络上。这意味着,一旦docker启动,我将失去与服务器的ssh连接。
几个论坛都说要添加以下内容/etc/docker/daemon.json:
{
"bip": "192.168.1.1/24"
}
Run Code Online (Sandbox Code Playgroud)
一种可行的解决方案正在运行:
sudo ip addr add dev docker0 192.168.1.1/24
sudo ip addr del dev docker0 172.17.0.1/16
Run Code Online (Sandbox Code Playgroud)
资料来源:forums.docker.com
尽管这是一个可能的解决方案,但我必须在docker服务启动后执行此操作。我无法执行某些操作,因为与此同时我失去了连接。
添加-bip到ExecStart行后,尝试启动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)
Run Code Online (Sandbox Code Playgroud)
这里唯一的错误是您应该使用--bip而不是-bip。检查接受的答案!
我的解决方案是使用运行 shell 命令的服务来完成此操作。
我创建docker-network-setup.sh:
sudo ip addr add dev docker0 192.168.1.1/24
sudo ip addr del dev docker0 172.17.0.1/16
Run Code Online (Sandbox Code Playgroud)
chmod u+x docker-network-setup.sh以确保您可以执行它。
和docker-network-setup.service:
[Unit]
Description=Change docker0 default IP
# When systemd stops or restarts the docker.service, the action is propagated to this unit
PartOf=docker.service
# Start this unit after the docker.service start
After=docker.service
[Service]
# The program will exit after running the script
Type=oneshot
# Execute the shell script
ExecStart=/bin/bash /home/user01/docker-network-setup.sh start
# This service shall be considered active after start
RemainAfterExit=yes
[Install]
# This unit should start when docker.service is starting
WantedBy=docker.service
Run Code Online (Sandbox Code Playgroud)
sudo cp docker-network-setup.service /etc/systemd/system并且该服务已启用!
不要忘记sudo systemctl daemon-reload您是否想立即测试该服务。
不需要额外的实体:
--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驱动程序默认池的参数。
| 归档时间: |
|
| 查看次数: |
2790 次 |
| 最近记录: |