问题标签 [docker-networking]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
701 浏览

docker - Docker for Mac 主机网络

我正在使用 Docker for Mac。我有两个容器。

第一个:试图连接到 localhost:3306 到 MySQL 的 PHP 应用程序。

第二:MySQL

当使用链接运行时,它们能够相互访问。

但是,我想避免更改 PHP 应用程序中的任何代码(例如,将 localhost 更改为“mysql”)并继续使用 localhost。

主机网络似乎可以解决问题,问题是,当我启用主机网络时,我无法访问主机 mac 上端口 80 上的 PHP 应用程序。

如果我 docker exec -it 进入 php 应用程序并 curl localhost,我会看到 HTML,所以看起来端口只是没有转发到主机?

0 投票
1 回答
46 浏览

networking - 如何使用 docker 在同一域上为每个用户创建 linux 映像

这是我想做的事情(我什至不确定在网上寻找什么文档)。

这样我就可以将root登录分发给容器@域。喜欢:

ssh root@userXXX.somedomain.foo

ssh root@userYYY.somedomain.foo

ssh root@userZZZ.somedomain.foo

这甚至可能吗?我想我需要设置 DNS

somedomain.foo

并将所有主机都放在同一个 docker 网络上(这似乎很合乎逻辑)。我似乎无法弄清楚的问题是 hostname.somedomain.foo => docker container 的正确路由

每个容器都需要它自己的 IP 注册使用该主机/IP 更新 DNS 记录 DNS 需要成为我真实网络上所有机器都知道的 somedomain.foo 的 DNS 授权之一。

有没有人做过这种事情?

如果这个问题更适合超级用户,请告诉我,我可以移动它

0 投票
1 回答
1069 浏览

linux - 容器内的 virt-install 命令

在容器中运行 libvirtd 服务 - 使用以下链接中列出的步骤 - http://www.projectatomic.io/blog/2014/10/libvirtd_in_containers/

能够在 rhel7 上成功启动 libvirtd 服务容器。但是当我启动 libvirt-client 容器并尝试在其上运行 virt-install 命令以启动 fedora - 我们看到以下错误。

[root@b054f0860441 libvirt]# virt-install --name fedoratest --vcpus=4 --ram 4096 --os-type=linux --disk path=/var/lib/libvirt/images/Fedora-Cloud-Base- 24-1.2.x8664.qcow2,format=qcow2,size=9 --check pathinuse=off, --noautoconsole --network bridge=virbr0 --import 警告 KVM 加速不可用,使用 'qemu' 警告 磁盘 /var/lib /libvirt/images/Fedora-Cloud-Base-24-1.2.x8664.qcow2 已被其他来宾 ['x', 'y'] 使用。

开始安装... 错误无法在 'virbr0' 上获取接口 MTU:没有这样的设备 -------->>>> 这似乎是错误

与 docker0、virbr0 网络、DNS 连接等的连接都很好。ifconfig 命令不会列出容器内的接口,但 'ip addr' 会列出 docker 内的接口。任何帮助表示赞赏。

0 投票
0 回答
659 浏览

docker - docker 覆盖网络可以绑定到单个特定的父网络接口吗?

我正在docker service用 docker swarm 创建。我希望我的每个 docker 服务在每个 swarm 节点上都有自己的特定 IP 地址。所以我的实例有多个网络接口(eth1、eth2 和 eth3),每个接口都有自己不同的 IP 地址。我希望能够创建连接到每个节点上的单个父网络接口的 docker 覆盖网络,以便每个 docker 服务在每个节点上都有自己的 IP 地址。

这是我尝试创建这样的网络和与之配套的服务:

问题是这个覆盖网络nginx1-net只会出现在我创建它的管理节点上,不会出现在任何其他节点上。(我怀疑这是因为该服务默认会附加到 docker0 和 eth0 上)

这会导致我可以从任何接口(eth1、eth2 和 eth3)上的任何 IP 地址访问此服务,而不仅仅是我定义的 eth2 接口。

如何将覆盖网络和 docker 服务绑定到单个网络接口?

注意:我的总体目标是创建 docker 服务,其中每个容器都有一个可路由的外部 IP 地址。

0 投票
0 回答
75 浏览

docker - docker服务只能附加到docker覆盖网络吗?

现在似乎 docker 服务只能附加到 docker 覆盖网络,不能附加到任何类型的本地 docker 网络,并且似乎覆盖网络是唯一可用的非本地swarm网络类型。那么 docker 服务只能附加到 docker 覆盖网络还是有其他可用选项?

我的问题是我正在尝试使用容器创建 docker 服务,这些容器将自己附加到特定的可路由 IP 地址,以便每个容器都有自己的可路由 IP 地址。使用 docker 覆盖网络来实现这是一件非常困难的事情,我也还没有找到解决方案。

0 投票
1 回答
187 浏览

docker - 哪些容器编排工具可以部署具有可路由 IP 地址的容器?

我正在尝试将容器部署到多个节点的分布式系统上,最终目标是将每个容器绑定到其自己的特定可路由 IP 地址。这是因为我想为我的 docker 容器使用硬件负载均衡器,这需要单独的 IP 地址。

我可以通过使用 docker 命令行工具来启动在具有多个网络接口(eth0:0.eth0:1、eth0:2、eth1、eth2、eth3 等)的服务器上运行的容器,从而实现具有可路由 IP 地址的容器其中有自己的可路由 IP 地址。然后,每个容器都可以使用特定-p选项将自己附加到其中一个接口的可用 IP 地址。

例如,如果我有一个 IP 1.2.3.4eth0:2我想将一个 nginx 容器附加到我可以使用以下命令附加它:

这样做的限制是每个运行 docker 的实例都有一个特定的可路由 IP 地址池。我的编排工具必须只能使用该池中的 IP 地址,并且每个 IP 地址只能使用一次。(不要担心这个扩展问题,更多的 IP 地址总是可以从一个 openstack 管理节点添加)。

到目前为止,我已经尝试使用 docker swarm 1.12 来实现这一点,使用 docker 服务,但很明显这不是该编排工具的预期用例。

因此,我正在寻找一种新的编排工具,它可以让我执行以下操作:

  1. 将多个服务器上的 docker 容器绑定到特定的 IP 地址,在创建 docker 容器时定义。
  2. 知道每台服务器都有一个特定的 IP 地址池可供选择,并且知道每个节点上的池都是不同的。
  3. 不会覆盖自身并尝试将两个正在运行的容器绑定到同一个 IP 地址。

它还必须提供容器编排工具的一些更常见的方面,例如:

  1. 在节点发生故障时提供自动容器重新调度。
  2. 提供自我修复,创建新容器以替换已死亡的旧容器。
  3. 提供一个简单的容器部署系统。

我还应该注意,我的每台服务器也是领事集群的一部分。对我来说,根据我非常具体的网络要求,似乎最好的解决方案是结合使用 consul watch、consul 健康检查和 consul 键值来管理整个系统(可能使用旧的容器化版本的 docker swarm)在每个运行 docker 的实例上运行个人编写的脚本,以确定任何一台服务器应采取的正确行动。

但是,出于我的目的,我宁愿使用通用的容器编排工具。所以我想知道是否有任何其他容器编排工具(如 mesos、kubernetes、nomad 等)允许这种级别的 docker 端口映射定制?还是我最好只使用自定义领事健康检查和手表?

另请注意,我在私有 openstack 云中运行我的系统,在 ubuntu 14.04 服务器上(所以舰队不是一个选项)。

0 投票
1 回答
1638 浏览

docker - 多播未发送到所有 Docker 容器

我在 docker-compose 中定义了 3 个服务。其中一个发送应该由其他 2 个服务接收的多播,但只有一个接收它。2 个接收者在不同的网络中,发送者是两个网络的一部分。

码头工人-compose.yml:

receiver1 获得多播,但 receiver2 没有。

如果我从发送者网络字段中删除 network_a,则接收者 2 会收到消息。不知何故,多播在多个网络上不起作用。

有谁知道为什么会这样?

0 投票
2 回答
937 浏览

docker - docker网络直接访问容器

我尝试从具有静态 IP 的多个 VM 迁移到基于容器的解决方案。

现在我正在使用带有静态 IP 的 VM:

在此处输入图像描述

我可以 ping 和 telnet 我的虚拟telnet 10.48.0.10 5432telnet 10.48.0.11 5432

我想创建一个允许我做同样事情的 docker 主机:

在此处输入图像描述

如果我可以telnet 172.17.0.2 5432,那就太好了telnet 172.17.0.3 5432

我尝试通过 docker 来完成,因为我想管理配置。

这样做的正确方法是什么?我应该在容器内使用 TCP 代理来管理它吗?

0 投票
2 回答
3015 浏览

docker - docker-compose 无法连接到外部网络

我创建了一个外部覆盖网络:

网络创建成功:

当我尝试将容器放入其中时docker-compose.yml,服务的创建失败并出现

我的docker-compose.yml样子是这样的:

是否docker-compose无法处理集群范围内的覆盖网络?

0 投票
1 回答
4192 浏览

networking - 按特定顺序将新 NIC 添加到 Docker 容器

我正在尝试拥有一个CentOS带有两个网络接口的容器。在浏览了 Docker 文档并“搜索”了一下之后,我发现了这个 GitHub 问题评论,它指定了如何实现这一点。

在它之后,我创建了一个新网络(默认类型bridge:)

检查新网络,我可以看到 Docker 将其分配给了 subnetwork172.18.0.0/16和 gateway 172.18.0.1/16

然后,在创建容器时,我专门附加了新网络:

在容器内部,我可以检查ifconfig该 IP 和 MAC 地址是否存在接口:

当我将容器连接到默认的 Docker 网络(bridge0又名bridge)时,问题就来了:

现在检查容器中的接口:

我的新网络的接口被移动到eth1,同时默认网络的接口被移动eth0

另外,在检查接口的配置文件时(/etc/sysconfig/network-scripts/ifcfg-eth0),我可以看到那里指定的 MAC 地址与我在运行容器时手动设置的地址不同08:00:AA:AA:AA:FF

里面/etc/sysconfig/network-scripts只有. (新添加的接口)eth0的文件丢失。eth1

由于我所涉及的工作的要求,我需要始终禁用第一个接口,并且必须专门设置其 MAC 地址。

任何其他与网络相关的工作都必须通过新连接的 NIC。

我的问题是:

如何将新的 NIC 附加到容器,以便eth0获得所需的 MAC 地址。

在图像级别执行此操作也很好。