我正在尝试使用docker 1.9中的compose运行docker网络。我知道这在1.9中仍然是实验性的,但我想知道我的用例是否可行。
基本上为了简化,我有两台服务器,每台服务器都在一个容器中。我们称他们为S1和S2。 S1全局暴露,必须可从S2访问。我想通过docker-compose运行S2并使用--x-networking标志(我之所以想要的是S2实际上比这里假设的更复杂,有几个容器,我希望它们运行在一个子网络)。 S1可以在有或没有撰写的情况下运行。
我从docker网络了解到,任何容器都可以从同一网络到达其他容器,或者可以通过主机端口映射到达“全局”暴露的任何容器,对吗?
所以我的情景是:
S2: build: . ports: - "8080:80"
结果:
我原本希望能够在172.17.0.1下达到它,因为S1根据我的理解使用了docker0。
此外,如果我在没有编写的情况下启动S2但是使用“docker run”手动启动,那么我可以使用172.17.0.1访问S1
那么为什么它不能用于撰写?由于网络功能仍处于试验阶段,这是一个限制吗?
答案 0 :(得分:9)
注意:
这是旧内容。在docker-compose中删除了--x-networking 1.6。另外,Docker compose有一个新的文件格式。
文档说明网络功能为experimental in Docker compose。
注意:Compose的网络支持是实验性的,必须是 使用docker-compose --x-networking标志显式启用。
Docker 1.9实际上实现了新功能:
https://docs.docker.com/engine/userguide/networking/dockernetworks/
也许一个例子会有所帮助。
└── demo
└── docker-compose.yml
我正在使用docker 1.9.0和docker-compose 1.5.0
声明两个名为“web1”和“web2”的容器。在这种情况下,无论什么形象,我都在运行tomcat。
web1:
image: tomcat:8.0
ports:
- 8080
web2:
image: tomcat:8.0
ports:
- 8080
使用docker compose
开始$ cd demo
$ docker-compose --x-networking up -d
Creating network "demo" with driver "None"
Creating demo_web2_1
Creating demo_web1_1
注意在指定新的 - x-networking 参数时如何创建名为“demo”的网络。
每个容器都在创建的“演示”网络上运行,每个容器都作为其他主机文件中的条目放置。
$ docker-compose ps
Name Command State Ports
---------------------------------------------------------------
demo_web1_1 catalina.sh run Up 0.0.0.0:32773->8080/tcp
demo_web2_1 catalina.sh run Up 0.0.0.0:32772->8080/tcp
$ docker exec -it demo_web1_1 cat /etc/hosts
..
172.18.0.2 demo_web2_1
$ docker exec -it demo_web2_1 cat /etc/hosts
..
172.18.0.3 demo_web1_1
启动另一个容器,并指定您希望将其附加到“演示”网络:
$ docker run --net demo --name helloworld -d tomcat:8.0
查看其他容器中的hosts文件如何自动更新
$ docker exec -it demo_web1_1 cat /etc/hosts
..
172.18.0.2 demo_web2_1
172.18.0.4 helloworld
$ docker exec -it demo_web2_1 cat /etc/hosts
172.18.0.3 demo_web1_1
172.18.0.4 helloworld
$ docker exec -it helloworld cat /etc/hosts
172.18.0.2 demo_web2_1
172.18.0.3 demo_web1_1