了解Docker链接中的源容器和目标容器

时间:2015-08-28 20:42:01

标签: docker

我刚刚阅读了关于链接的Docker文档, HERE ,并且遇到了以下命令:

$ docker run -d -P --name web --link db:db training/webapp python app.py

在上面的命令中,正在创建一个新容器。 web并且它正在链接到现有容器I.E。db,现在在文档中用于解释上述命令的术语是source容器和target容器。

这个术语在我给出的命令的上下文中真正意味着什么?哪个是source,哪个是target容器?我很难理解这一点,有人可以解释一下吗?

谢谢。

亚历-Z。

2 个答案:

答案 0 :(得分:2)

在本文档中,他们提供了一个示例,其中链接别名与要链接的容器具有相同的名称是令人不安的。

docker run documentation中,我们可以找到不那么令人不安的用法示例。

--link=""  : Add link to another container (<name or id>:alias or <name or id>)

如果您已经有一个名为db的容器运行数据库服务,那么您可以启动以下名为foo的容器:

docker run -d --name foo --link db:potato somedockerimage

然后,从foo容器,您将使用以下配置字符串连接到数据库:

mysql://potato:3306/somedb

答案 1 :(得分:1)

我们以这个例子为例,假设我们有2个容器:

-A
-B

A的状态是“未运行”;
B的状态是“跑”;

我想将A链接到B,命令是:

# linking without alias
docker run --name A --link B ubuntu:latest

# linking with alias
docker run --name A --link B:B_alias ubuntu:latest

“图形化”情况是:

B-------A

SOURCE容器是B,它已经存在并且已经在运行;
我创建并且现在正在运行的TARGET容器是A;
这个术语可以更容易区分A和B.

如果您检查每个容器的/ etc / hosts文件,您会注意到:
B - hosts文件:有一个别名的IP地址为A;
A - hosts文件:B的ip地址有别名;

A的主机文件的示例可以是:

#/etc/hosts  
...  
127.0.0.1 localhost  
...  
...  
172.17.0.4 B  

A和B之间的通信是双向的。 你可以从B到A和从A到B ping,让我们用这个验证 来自主机的命令:

# ping from B to A
docker exec -t B ping A

# ping from A to B
docker exec -t A ping B

最后,来自docker documentation
“Docker在容器之间创建了一条安全隧道 不需要在容器外部暴露任何端口;“ 理解链接的重要部分是没有 容器的信息需要通过链接容器公开公开

资料来源:documentation

的个人经历和研究