链接容器不会在 localhost 上发布端口,而是连接两个容器之间的专用网络。使用上面的示例,使用主机名的容器可以使用公开的端口(EXPOSE
Dockerfile 中的语法)进行发现:some-service
jenkins-slave
$ nc my-service 8080
Docker 还会注入一大堆环境变量。要在没有 Jenkins 的情况下看到这一点,只需手动运行几个容器。
首先将服务容器作为守护进程运行:
$ docker run --rm -d --name some-service tutum/hello-world
d26f4f768218006060e5bed6f228a979be51246722f70e2bc75db73b9d21fd62
然后运行一个 Alpine 容器:
$ docker run --link some-service:my-service -it alpine:3.7 sh
检查环境:
/ # env
MY_SERVICE_PORT_80_TCP=tcp://172.17.0.6:80
HOSTNAME=b1a44bdfa022
SHLVL=1
HOME=/root
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MY_SERVICE_PORT=tcp://172.17.0.6:80
MY_SERVICE_NAME=/vigilant_beaver/my-service
MY_SERVICE_PORT_80_TCP_ADDR=172.17.0.6
PWD=/
MY_SERVICE_PORT_80_TCP_PORT=80
MY_SERVICE_PORT_80_TCP_PROTO=tcp
连接到依赖服务:
/ # wget -q -O- http://my-service/
<html>
<head>
<title>Hello world!</title>
<link href='http://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css'>
<style>
body {
background-color: white;
text-align: center;
padding: 50px;
font-family: "Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;
}
#logo {
margin-bottom: 40px;
}
</style>
</head>
<body>
<img id="logo" src="logo.png" />
<h1>Hello world!</h1>
<h3>My hostname is d26f4f768218</h3> </body>
</html>
如果您的网络需求变得更加复杂,请考虑设置Docker 网络。
干杯!