【发布时间】:2016-03-10 02:27:32
【问题描述】:
我正在尝试在 docker 1.9 中使用 compose 运行 docker 网络。我知道这在 1.9 中仍处于试验阶段,但我想知道我的用例是否可以工作。
为了简化,我有两台服务器,每台都在一个容器中。我们称它们为 S1 和 S2。 S1 是全局公开的,必须可以从 S2 访问。我想通过带有--x-networking标志的docker-compose运行S2(我想要这个的原因是S2实际上比这里假设的要复杂一些,有几个容器,我希望它们在单个子网)。 S1 可以在有或没有 compose 的情况下运行。
我从 docker 网络中了解到,任何容器都可以从同一网络访问其他容器,或者可以访问通过主机端口映射“全局”公开的任何内容,对吗?
所以我的情况是:
- 我使用“-p 7210:7202”等端口映射手动启动 S1(7202 在 dockerfile 中公开)
- S2 是从一个简单的 compose 文件创建的,并带有标志 --x-networking 对于我的测试用例,我刚刚创建了一个非常简约的 compose 文件,例如:
S2: build: . ports: - "8080:80"
结果:
- 在“localhost”下从 S2 看不到 S1(这是意料之中的)
- S1 在“172.17.0.1”下的 S2 不可见(= 接口 docker0)
我本来希望能够在 172.17.0.1 下访问它,因为据我了解,S1 使用 docker0。
此外,如果我不使用 compose 而手动使用“docker run”启动 S2,那么我可以使用 172.17.0.1 访问 S1
那么为什么它不能与 compose 一起使用呢?由于网络功能仍处于试验阶段,是否存在限制?
【问题讨论】:
-
我不希望它在该 IP 上可用。您可以使用
docker network connect project-name S2-container-name告诉 S1 加入 compose 网络。 project-name是compose项目名,可以设置,或者默认为compose文件所在目录的dirname。
标签: docker docker-compose