Docker 容器无法通过覆盖网络连接

标签 docker vagrant overlay consul

我有多个运行 Docker 的主机,我使用 Consul 作为键值存储。我能够创建覆盖网络,容器可以看到彼此的主机名和 IP,/etc/hosts 在创建/销毁容器时得到很好的更新。但是,不同主机上的容器实际上无法相互连接(同一主机上的容器可以)。

我一直在调查日志,Docker 守护进程日志包含这些:

[INFO] serf: EventMemberJoin: vagrant-ubuntu-trusty-64 192.168.57.103

[ERR] memberlist: Conflicting address for vagrant-ubuntu-trusty-64. Mine: 192.168.57.103:7946 Theirs: 192.168.57.102:7946

[ERR] serf: Node name conflicts with another node at 192.168.57.102:7946. Names must be unique! (Resolution enabled: true)

Docker 守护进程是否应该以某种方式识别自己?看起来 Serf 很困惑,因为每个守护进程只使用主机名作为标识符。

最佳答案

回答:集群成员需要有唯一的主机名,因为 Docker 守护进程是根据主机名识别的(默认情况下)。为什么 Docker 在他们的教程中忽略了这一点?

关于Docker 容器无法通过覆盖网络连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34769681/

相关文章:

linux - 如何从命令行更新 Helm Chart.yaml

mysql - 如何在基于 mysql 版本 8 的 docker 镜像中安装 vim?

docker - 在 docker 数据容器与卷中部署 Web 应用程序

video - ffmpeg 在叠加层中延迟视频

video - 如何使用 'overlay_cuda'、ffmpeg 视频过滤器在视频上刻录基于字幕的图像

docker - 结合使用 VOLUME + docker run -v

ruby-on-rails - 在 Virtual Box Ubuntu 12.04 中运行 Rails 非常慢

android - 用于安装 Android SDK 的 Ansible-playbook

ubuntu - 用于 Vagrant 的 Ansible 配置器中的 $PATH 环境变量

android - 手机屏幕内的可见地理点