我刚刚阅读了关于链接的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。
答案 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
的个人经历和研究