解决 Docker 私有容器注册表的 “no route to host” 问题

35次阅读
没有评论

问题描述

在安装了 Docker 后(在 Ubuntu 上),默认的 172 IP 地址被替换成了 10.200.x.x。用户执行了以下命令来修改 Docker0 网络接口的 IP 地址:

sudo ip addr add dev docker0 10.200.200.90/24
sudo ip addr del dev docker0 172.17.0.1/16

用户的机器 IP 是 10.203.32.90。然后用户运行了一个基本命令来启动一个私有容器注册表:

docker run -d -p 5000:5000 --restart=always --name registry registry:2

但是,在尝试将镜像推送到注册表时出现了 “no route to host” 错误:

docker push 10.203.32.90:5000/myimage

用户想知道自己做错了什么或者有什么遗漏。

解决方案

请注意以下操作可能涉及修改系统配置,请谨慎操作并备份重要数据。

步骤1:检查 Docker 网络设置

首先,您需要检查 Docker 网络设置,确保网络配置正确。

  1. 打开终端,并运行以下命令来查看 Docker 网络列表:
docker network ls
  1. 查找名为 “bridge” 的网络条目,并记下网络 ID(例如:47ebbf46f26d)。

  2. 运行以下命令,替换 <NETWORK_ID> 为您在步骤 2 中获得的网络 ID,以查看网络的详细信息:

docker network inspect <NETWORK_ID>
  1. 在输出中查找 “Subnet” 字段,确认网络的 IP 地址段是否与您的期望配置一致。

步骤2:修改 Docker Daemon 配置

如果发现 Docker 网络的 IP 地址段与您的期望配置不一致,您可以修改 Docker Daemon 配置来解决问题。

  1. 打开终端,并运行以下命令来编辑 Docker Daemon 配置文件:
sudo nano /etc/docker/daemon.json
  1. 在文件中添加以下内容,替换 <NEW_BRIDGE_IP> 为您希望的新的 Bridge IP 地址段:
{
    "bip": "<NEW_BRIDGE_IP>"
}
  1. 保存并关闭文件。

  2. 重新启动 Docker Daemon 以应用新的配置:

sudo systemctl restart docker

步骤3:测试推送到注册表

现在,您可以尝试再次推送镜像到私有容器注册表:

docker push 10.203.32.90:5000/myimage

如果一切配置正确,您应该能够成功地推送镜像到注册表中。

注意事项

  • 确保您在修改 Docker 配置文件时备份了重要数据,以防发生意外情况。
  • 在修改网络配置或 Docker Daemon 配置之前,确保您了解操作的风险,并且对系统进行适当的备份。

以上解决方案应该可以帮助您解决 “no route to host” 错误并成功推送镜像到私有容器注册表中。如果您遇到其他问题或需要进一步的帮助,请随时提问。

正文完