同一网络中的docker容器无法到达同一网络中的其他容器

时间:2016-01-18 00:43:35

标签: ubuntu curl nginx docker digital-ocean

我在ubuntu 15.10

上使用digital ocean

以下作品 docker network create a

docker run -d --name=nginx --net=a nginx

docker run -it --net=a --name web node bash

apt-get install -yq curl && curl nginx

相反,试图从web container到达nginx container,对我不起作用。

我进入网络容器: docker exec -it web bash

然后我添加了index.html文件

然后我使用http-server使用index.html命令提供http-server ./ -p 4200 -a 0.0.0.0 index.html文件。

http-server返回:

Starting up http-server, serving ./
Available on:
  http:127.0.0.1:4200
  http:172.17.0.5:4200
Hit CTRL-C to stop the server

如果我进入nginx并尝试curl web:4200,那么我会curl: (7) Failed to connect to web port 4200: Connection refused

2 个答案:

答案 0 :(得分:2)

在DigitalOcean上发布了一个新的Ubuntu 15.10 Droplet 试图重现这一点;

使用快速n脏curl | sh安装方法 - 不是最佳做法,但是,这很容易:

apt-get install -y curl && curl -fsSL https://get.docker.com | sh

在该网络上创建网络mynetwork和容器weba以及webb;

docker network create mynetwork
docker run --net mynetwork --name weba -d node sh -c 'npm install http-server -g && mkdir -p /public && echo "welcome to weba" > /public/index.html && http-server -a 0.0.0.0 -p 4200'
docker run --net mynetwork --name webb -d node sh -c 'npm install http-server -g && mkdir -p /public && echo "welcome to webb" > /public/index.html && http-server -a 0.0.0.0 -p 4200'

从weba内部访问webb

docker exec -it weba sh -c 'curl http://webb:4200'
# welcome to webb

从webb内部联系weba

docker exec -it webb sh -c 'curl http://weba:4200'
# welcome to weba

这看起来对我有用;您的环境有什么不同吗?

答案 1 :(得分:1)

现在是质疑网络隔离是否是您使用容器的重要部分的好时机。

考虑通过在与主机操作系统相同的网络上运行容器来避免此问题。

在运行systemd的现代Linux系统上,您可以访问systemd-nspawn容器解决方案,而无需安装任何其他软件。它提供进程隔离,资源管理,chroot环境以及使用--network-veth选项共享Host OS网络的能力。