docker network基础
<p>前面介绍了nginx与php两个容器间是如何进行通信的:</p><div class="cnblogs_code">
<pre># docker run -d --name=php -v /www:/usr/local/nginx/html php</pre>
</div>
<div class="cnblogs_code">
<pre># docker run -d --name=nginx --link=php:php -v /www:/usr/local/nginx/html -p <span style="color: rgba(128, 0, 128, 1)">81</span>:<span style="color: rgba(128, 0, 128, 1)">80</span> nginx</pre>
</div>
<div class="cnblogs_code">
<pre># docker <span style="color: rgba(0, 0, 255, 1)">ps</span> -<span style="color: rgba(0, 0, 0, 1)">a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
58280fe851f9 nginx </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/usr/local/nginx/...</span><span style="color: rgba(128, 0, 0, 1)">"</span> <span style="color: rgba(128, 0, 128, 1)">15</span> seconds ago Up <span style="color: rgba(128, 0, 128, 1)">14</span> seconds <span style="color: rgba(128, 0, 128, 1)">0.0</span>.<span style="color: rgba(128, 0, 128, 1)">0.0</span>:<span style="color: rgba(128, 0, 128, 1)">81</span>-><span style="color: rgba(128, 0, 128, 1)">80</span>/<span style="color: rgba(0, 0, 0, 1)">tcp nginx
9ea150c35587 php </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/usr/local/php/sb...</span><span style="color: rgba(128, 0, 0, 1)">"</span> <span style="color: rgba(128, 0, 128, 1)">36</span> seconds ago Up <span style="color: rgba(128, 0, 128, 1)">35</span> seconds <span style="color: rgba(128, 0, 128, 1)">9000</span>/tcp php</pre>
</div>
<p>通过容器间的选项--link指定容器名称进行不同容器间的通信(--link container_name或者将container_name取一个别名)</p>
<p>现在使用另外一种方式替代--link来达到容器间的通信:docker network</p>
<p>查看local的网络信息:</p>
<div class="cnblogs_code">
<pre># docker network <span style="color: rgba(0, 0, 255, 1)">ls</span><span style="color: rgba(0, 0, 0, 1)">
NETWORK ID NAME DRIVER SCOPE
5133ec415c3c bridge bridge local
f359ca4e2d39 host host local
8d68673c045c none </span><span style="color: rgba(0, 0, 255, 1)">null</span> local</pre>
</div>
<p>现在创建一个网络名为my_net且driver为bridge的网络:(默认创建的就是bridge)</p>
<div class="cnblogs_code">
<pre># docker network create my_net
67e29f0e4a77c79144efc337a081a889188b5b8e289968f22be6e4ddd9b80610
# docker network <span style="color: rgba(0, 0, 255, 1)">ls</span><span style="color: rgba(0, 0, 0, 1)">
NETWORK ID NAME DRIVER SCOPE
5133ec415c3c bridge bridge local
f359ca4e2d39 host host local
67e29f0e4a77 my_net bridge local
8d68673c045c none </span><span style="color: rgba(0, 0, 255, 1)">null</span> local</pre>
</div>
<p>利用--network启动容器提供服务:</p>
<div class="cnblogs_code">
<pre># docker run -d --name=php --network my_net --network-alias php -v /www:/usr/local/nginx/<span style="color: rgba(0, 0, 0, 1)">html php
6b493cbe8207dee4cb4d5945cfce305dba96914083bd7f46841b0b42376bcb99
# docker run -d --name=nginx --network my_net --network-alias nginx -v /www:/usr/local/nginx/html -p <span style="color: rgba(128, 0, 128, 1)">80</span>:<span style="color: rgba(128, 0, 128, 1)">80</span><span style="color: rgba(0, 0, 0, 1)"> nginx
5ab220196b52bb768bef508433f0b920eecee70c3ee47880ebc5e2a74b5ee254</span></pre>
</div>
<p>通过选项--network-alias将取名的my_net起了一个别名</p>
<div class="cnblogs_code">
<pre># docker exec -it nginx <span style="color: rgba(0, 0, 255, 1)">ping</span><span style="color: rgba(0, 0, 0, 1)"> php
PING php (</span><span style="color: rgba(128, 0, 128, 1)">172.18</span>.<span style="color: rgba(128, 0, 128, 1)">0.2</span>) <span style="color: rgba(128, 0, 128, 1)">56</span>(<span style="color: rgba(128, 0, 128, 1)">84</span><span style="color: rgba(0, 0, 0, 1)">) bytes of data.
</span><span style="color: rgba(128, 0, 128, 1)">64</span> bytes from php.my_net (<span style="color: rgba(128, 0, 128, 1)">172.18</span>.<span style="color: rgba(128, 0, 128, 1)">0.2</span>): icmp_seq=<span style="color: rgba(128, 0, 128, 1)">1</span> ttl=<span style="color: rgba(128, 0, 128, 1)">64</span> <span style="color: rgba(0, 0, 255, 1)">time</span>=<span style="color: rgba(128, 0, 128, 1)">0.079</span><span style="color: rgba(0, 0, 0, 1)"> ms
</span><span style="color: rgba(128, 0, 128, 1)">64</span> bytes from php.my_net (<span style="color: rgba(128, 0, 128, 1)">172.18</span>.<span style="color: rgba(128, 0, 128, 1)">0.2</span>): icmp_seq=<span style="color: rgba(128, 0, 128, 1)">2</span> ttl=<span style="color: rgba(128, 0, 128, 1)">64</span> <span style="color: rgba(0, 0, 255, 1)">time</span>=<span style="color: rgba(128, 0, 128, 1)">0.090</span> ms</pre>
</div>
<p>这里为啥能够ping通过php这个容器呢,因为这两个容器在同一个网络m'y_net内,而nginx里面ping的php是容器名(这里管理的是容器级别)</p>
<p>由于能够ping通php,所以在nginx中配置的:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">server {
listen </span><span style="color: rgba(128, 0, 128, 1)">80</span><span style="color: rgba(0, 0, 0, 1)">;
root </span>/usr/local/nginx/<span style="color: rgba(0, 0, 0, 1)">html;
index index.htm index.html index.php;
location </span>~<span style="color: rgba(0, 0, 0, 1)"> \.php$ {
root </span>/usr/local/nginx/<span style="color: rgba(0, 0, 0, 1)">html;
fastcgi_pass php:</span><span style="color: rgba(128, 0, 128, 1)">9000</span><span style="color: rgba(0, 0, 0, 1)">;
fastcgi_index index.php;
fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;
include fastcgi_params;
}
}</span></pre>
</div>
<p>所以配置文件中的php不会导致nginx启动失败,通过network的driver bridge实现了容器间的访问</p>
<p><img src="https://images2017.cnblogs.com/blog/1168897/201711/1168897-20171112215036075-629506272.png" alt=""></p>
<p> </p>
<p>上面在容器启动的时候使用的是选项--network,而在compose的配置文件中则是networks,现在通过配置文件来进行阐述该参数的作用:</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">cat</span><span style="color: rgba(0, 0, 0, 1)"> lnmp.yml
version: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">3</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
services:
nginx:
image: nginx
container_name: lnmp</span>-<span style="color: rgba(0, 0, 0, 1)">nginx
depends_on:
</span>-<span style="color: rgba(0, 0, 0, 1)"> php
ports:
</span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">80:80</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
networks:
</span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">net1</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
volumes:
</span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/www:/usr/local/nginx/html</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
php:
image: php
container_name: lnmp</span>-<span style="color: rgba(0, 0, 0, 1)">php
expose:
</span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">9000</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
networks:
</span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">net1</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
volumes:
</span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/www:/usr/local/nginx/html</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
networks:
net1:
driver: bridge</span></pre>
</div>
<p>由上述文件中可以知道networks定义了一个名称为net1的网络,由于networks是top-level(顶层级别,所以需要在顶层设置),而在创建的网络时候需要指定driver(单一网络使用bridge,swarm集群使用overlay),而且driver内容不能省略,在nginx和php两个service中使用了同一网络net1,现在将服务启动:</p>
<div class="cnblogs_code">
<pre># docker-compose -<span style="color: rgba(0, 0, 0, 1)">f lnmp.yml up
Creating network </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">lnmp_net1</span><span style="color: rgba(128, 0, 0, 1)">"</span> with driver <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">bridge</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
Creating lnmp</span>-<span style="color: rgba(0, 0, 0, 1)">php ...
Creating lnmp</span>-php ... <span style="color: rgba(0, 0, 255, 1)">done</span><span style="color: rgba(0, 0, 0, 1)">
Creating lnmp</span>-<span style="color: rgba(0, 0, 0, 1)">nginx ...
Creating lnmp</span>-nginx ... <span style="color: rgba(0, 0, 255, 1)">done</span><span style="color: rgba(0, 0, 0, 1)">
Attaching to lnmp</span>-php, lnmp-nginx</pre>
</div>
<p>可以看出在启动服务的时候创建了服务级别的网络lnmp_net1</p>
<div class="cnblogs_code">
<pre># docker network <span style="color: rgba(0, 0, 255, 1)">ls</span><span style="color: rgba(0, 0, 0, 1)">
NETWORK ID NAME DRIVER SCOPE
5133ec415c3c bridge bridge local
f359ca4e2d39 host host local
29d798852b52 lnmp_net1 bridge local
67e29f0e4a77 my_net bridge local
8d68673c045c none </span><span style="color: rgba(0, 0, 255, 1)">null</span> local</pre>
</div>
<p>服务nginx和php在网络lnmp_net1实现了互联通信</p>
<div class="cnblogs_code">
<pre># docker-compose -f lnmp.yml exec nginx <span style="color: rgba(0, 0, 255, 1)">ping</span><span style="color: rgba(0, 0, 0, 1)"> php
PING php (</span><span style="color: rgba(128, 0, 128, 1)">172.19</span>.<span style="color: rgba(128, 0, 128, 1)">0.2</span>) <span style="color: rgba(128, 0, 128, 1)">56</span>(<span style="color: rgba(128, 0, 128, 1)">84</span><span style="color: rgba(0, 0, 0, 1)">) bytes of data.
</span><span style="color: rgba(128, 0, 128, 1)">64</span> bytes from lnmp-php.lnmp_net1 (<span style="color: rgba(128, 0, 128, 1)">172.19</span>.<span style="color: rgba(128, 0, 128, 1)">0.2</span>): icmp_seq=<span style="color: rgba(128, 0, 128, 1)">1</span> ttl=<span style="color: rgba(128, 0, 128, 1)">64</span> <span style="color: rgba(0, 0, 255, 1)">time</span>=<span style="color: rgba(128, 0, 128, 1)">0.060</span> ms</pre>
</div>
<p>在nginx服务中能够访问php的服务,在compose编排中级别的访问是对service级别的访问,所以在nginx服务配置文件中对应的php能够实现,不会导致nginx启动失败</p>
<p>及在compose的配置文件设置并对应的是service级别,当使用参数links也是配置的php服务,使得nginx服务能够ping通php服务并实现访问通信</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">cat</span><span style="color: rgba(0, 0, 0, 1)"> lnmp.yml
version: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">3</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
services:
nginx:
image: nginx
container_name: lnmp</span>-<span style="color: rgba(0, 0, 0, 1)">nginx
depends_on:
</span>-<span style="color: rgba(0, 0, 0, 1)"> php
ports:
</span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">80:80</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
links:
</span>-<span style="color: rgba(0, 0, 0, 1)"> php:php
volumes:
</span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/www:/usr/local/nginx/html</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
php:
image: php
container_name: lnmp</span>-<span style="color: rgba(0, 0, 0, 1)">php
expose:
</span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">9000</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
volumes:
</span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/www:/usr/local/nginx/html</span><span style="color: rgba(128, 0, 0, 1)">"</span></pre>
</div>
<p>将networks参数改为了links参数,使得两个服务能够继续互联访问</p>
<div class="cnblogs_code">
<pre># docker-compose -<span style="color: rgba(0, 0, 0, 1)">f lnmp.yml up
Creating network </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">lnmp_default</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> with the default driver
Creating lnmp</span>-<span style="color: rgba(0, 0, 0, 1)">php ...
Creating lnmp</span>-php ... <span style="color: rgba(0, 0, 255, 1)">done</span><span style="color: rgba(0, 0, 0, 1)">
Creating lnmp</span>-<span style="color: rgba(0, 0, 0, 1)">nginx ...
Creating lnmp</span>-nginx ... <span style="color: rgba(0, 0, 255, 1)">done</span><span style="color: rgba(0, 0, 0, 1)">
Attaching to lnmp</span>-php, lnmp-nginx</pre>
</div>
<p>而且启动的时候创建的默认的网络</p>
<div class="cnblogs_code">
<pre># docker-compose -f lnmp.yml exec nginx <span style="color: rgba(0, 0, 255, 1)">ping</span><span style="color: rgba(0, 0, 0, 1)"> php
PING php (</span><span style="color: rgba(128, 0, 128, 1)">172.19</span>.<span style="color: rgba(128, 0, 128, 1)">0.2</span>) <span style="color: rgba(128, 0, 128, 1)">56</span>(<span style="color: rgba(128, 0, 128, 1)">84</span><span style="color: rgba(0, 0, 0, 1)">) bytes of data.
</span><span style="color: rgba(128, 0, 128, 1)">64</span> bytes from lnmp-php.lnmp_default (<span style="color: rgba(128, 0, 128, 1)">172.19</span>.<span style="color: rgba(128, 0, 128, 1)">0.2</span>): icmp_seq=<span style="color: rgba(128, 0, 128, 1)">1</span> ttl=<span style="color: rgba(128, 0, 128, 1)">64</span> <span style="color: rgba(0, 0, 255, 1)">time</span>=<span style="color: rgba(128, 0, 128, 1)">0.091</span><span style="color: rgba(0, 0, 0, 1)"> ms
</span><span style="color: rgba(128, 0, 128, 1)">64</span> bytes from lnmp-php.lnmp_default (<span style="color: rgba(128, 0, 128, 1)">172.19</span>.<span style="color: rgba(128, 0, 128, 1)">0.2</span>): icmp_seq=<span style="color: rgba(128, 0, 128, 1)">2</span> ttl=<span style="color: rgba(128, 0, 128, 1)">64</span> <span style="color: rgba(0, 0, 255, 1)">time</span>=<span style="color: rgba(128, 0, 128, 1)">0.107</span> ms</pre>
</div>
<p>--links也是能够使得服务间进行访问的</p>
<p> </p>
<p>现在通过案例讲解参数external_links的作用:external_links类似于links针对的也是service级别,但是external_links对应的是外部的service而不是同一compose配置文件中的service</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">cat</span><span style="color: rgba(0, 0, 0, 1)"> lnmp.yml
version: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">3</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
services:
nginx:
image: nginx
container_name: lnmp</span>-<span style="color: rgba(0, 0, 0, 1)">nginx
depends_on:
</span>-<span style="color: rgba(0, 0, 0, 1)"> php
ports:
</span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">80:80</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
networks:
</span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">net1</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
volumes:
</span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/www:/usr/local/nginx/html</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
external_links:
</span>-<span style="color: rgba(0, 0, 0, 1)"> php1:php
php:
image: php
container_name: lnmp</span>-<span style="color: rgba(0, 0, 0, 1)">php
expose:
</span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">9000</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
networks:
</span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">net1</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
volumes:
</span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/www:/usr/local/nginx/html</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
networks:
net1:
driver: bridge</span></pre>
</div>
<p>上面可以看见external_links配置了php1的服务,并且将php1的服务也取别名为了php,然后编写另一个compose配置文件,并配置服务名为php1的服务:</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">cat</span><span style="color: rgba(0, 0, 0, 1)"> php1.yml
version: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">3</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
services:
php1:
image: php
container_name: lnmp</span>-<span style="color: rgba(0, 0, 0, 1)">php1
expose:
</span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">9000</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
networks:
</span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">net1</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
volumes:
</span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/www:/usr/local/nginx/html</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
networks:
net1:
driver: bridge</span></pre>
</div>
<p>结合两个compose配置文件,可以知道有nginx、php、php1的服务,并且php1的服务也有php的别名,现在依次开启php1,和nginx与php:</p>
<div class="cnblogs_code">
<pre># docker-compose -<span style="color: rgba(0, 0, 0, 1)">f php1.yml up
Creating network </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">lnmp_net1</span><span style="color: rgba(128, 0, 0, 1)">"</span> with driver <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">bridge</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
Creating lnmp</span>-<span style="color: rgba(0, 0, 0, 1)">php1 ...
Creating lnmp</span>-php1 ... <span style="color: rgba(0, 0, 255, 1)">done</span><span style="color: rgba(0, 0, 0, 1)">
Attaching to lnmp</span>-php1</pre>
</div>
<div class="cnblogs_code">
<pre># docker-compose -f lnmp.yml up --<span style="color: rgba(0, 0, 0, 1)">build
WARNING: Found orphan containers (lnmp</span>-php1) <span style="color: rgba(0, 0, 255, 1)">for</span> this project. If you removed or renamed this service <span style="color: rgba(0, 0, 255, 1)">in</span> your compose <span style="color: rgba(0, 0, 255, 1)">file</span>, you can run this command with the --remove-<span style="color: rgba(0, 0, 0, 1)">orphans flag to clean it up.
Creating lnmp</span>-<span style="color: rgba(0, 0, 0, 1)">php ...
Creating lnmp</span>-php ... <span style="color: rgba(0, 0, 255, 1)">done</span><span style="color: rgba(0, 0, 0, 1)">
Creating lnmp</span>-<span style="color: rgba(0, 0, 0, 1)">nginx ...
Creating lnmp</span>-nginx ... <span style="color: rgba(0, 0, 255, 1)">done</span><span style="color: rgba(0, 0, 0, 1)">
Attaching to lnmp</span>-php, lnmp-nginx</pre>
</div>
<p>查看启动的容器状态:</p>
<div class="cnblogs_code">
<pre># docker <span style="color: rgba(0, 0, 255, 1)">ps</span> -<span style="color: rgba(0, 0, 0, 1)">a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a089cd261279 nginx </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/usr/local/nginx/...</span><span style="color: rgba(128, 0, 0, 1)">"</span> <span style="color: rgba(128, 0, 128, 1)">25</span> seconds ago Up <span style="color: rgba(128, 0, 128, 1)">25</span> seconds <span style="color: rgba(128, 0, 128, 1)">0.0</span>.<span style="color: rgba(128, 0, 128, 1)">0.0</span>:<span style="color: rgba(128, 0, 128, 1)">80</span>-><span style="color: rgba(128, 0, 128, 1)">80</span>/tcp lnmp-<span style="color: rgba(0, 0, 0, 1)">nginx
4ff4bf7c1bf9 php </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/usr/local/php/sb...</span><span style="color: rgba(128, 0, 0, 1)">"</span> <span style="color: rgba(128, 0, 128, 1)">25</span> seconds ago Up <span style="color: rgba(128, 0, 128, 1)">25</span> seconds <span style="color: rgba(128, 0, 128, 1)">9000</span>/tcp lnmp-<span style="color: rgba(0, 0, 0, 1)">php
4e39cdf62bf1 php </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/usr/local/php/sb...</span><span style="color: rgba(128, 0, 0, 1)">"</span> <span style="color: rgba(128, 0, 128, 1)">51</span> seconds ago Up <span style="color: rgba(128, 0, 128, 1)">51</span> seconds <span style="color: rgba(128, 0, 128, 1)">9000</span>/tcp lnmp-php1</pre>
</div>
<p>现在将nginx一起的php的这个服务停止掉,看下nginx服务是否将会被停止:</p>
<div class="cnblogs_code">
<pre># docker-compose -<span style="color: rgba(0, 0, 0, 1)">f lnmp.yml stop php
Stopping lnmp</span>-php ... <span style="color: rgba(0, 0, 255, 1)">done</span></pre>
</div>
<p>而在nginx这里的输出如下:</p>
<div class="cnblogs_code">
<pre>lnmp-php exited with code <span style="color: rgba(128, 0, 128, 1)">0</span></pre>
</div>
<div class="cnblogs_code">
<pre># docker <span style="color: rgba(0, 0, 255, 1)">ps</span> -<span style="color: rgba(0, 0, 0, 1)">a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a089cd261279 nginx </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/usr/local/nginx/...</span><span style="color: rgba(128, 0, 0, 1)">"</span> <span style="color: rgba(128, 0, 128, 1)">2</span> minutes ago Up <span style="color: rgba(128, 0, 128, 1)">2</span> minutes <span style="color: rgba(128, 0, 128, 1)">0.0</span>.<span style="color: rgba(128, 0, 128, 1)">0.0</span>:<span style="color: rgba(128, 0, 128, 1)">80</span>-><span style="color: rgba(128, 0, 128, 1)">80</span>/tcp lnmp-<span style="color: rgba(0, 0, 0, 1)">nginx
4ff4bf7c1bf9 php </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/usr/local/php/sb...</span><span style="color: rgba(128, 0, 0, 1)">"</span> <span style="color: rgba(128, 0, 128, 1)">2</span> minutes ago Exited (<span style="color: rgba(128, 0, 128, 1)">0</span>) <span style="color: rgba(128, 0, 128, 1)">52</span> seconds ago lnmp-php</pre>
</div>
<p>而php服务对应的容器lnmp-php也停止了,但是nginx的服务却没有停止,为什么呢?那是因为php1的服务并没有停止,而php1的服务也是别名php服务的,而external_links就是实现这种情况的</p>
<p>使一个compose中的服务能与另一个compose中的服务能够互联通信,compose就是service级别的实现,配置文件中对应的都是service级别,而不是容器名</p>
<p><img src="https://images2017.cnblogs.com/blog/1168897/201711/1168897-20171112222628450-2143246953.png" alt=""></p>
<p>而在另一个compose中也必须定义与之相同的网络名称,也就是说配置external_links时,两者服务间的网络名称必须一致,不然依旧不能进行互相访问</p>
<p>当使用了external_links时,必须启动另一个compose的service,如果仅仅启动的是包含此函数的compose那么service将会启动报错</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">cat</span><span style="color: rgba(0, 0, 0, 1)"> lnmp.yml_external_links
version: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">3</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
services:
nginx:
image: nginx
container_name: lnmp</span>-<span style="color: rgba(0, 0, 0, 1)">nginx
depends_on:
</span>-<span style="color: rgba(0, 0, 0, 1)"> php
ports:
</span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">80:80</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
networks:
</span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">net1</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
volumes:
</span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/www:/usr/local/nginx/html</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
external_links:
</span>-<span style="color: rgba(0, 0, 0, 1)"> php1:php
php:
image: php
container_name: lnmp</span>-<span style="color: rgba(0, 0, 0, 1)">php
expose:
</span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">9000</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
networks:
</span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">net1</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
volumes:
</span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/www:/usr/local/nginx/html</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
networks:
net1:
driver: bridge</span></pre>
</div>
<div class="cnblogs_code">
<pre># docker-compose -f lnmp.yml up --<span style="color: rgba(0, 0, 0, 1)">build
Creating network </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">lnmp_net1</span><span style="color: rgba(128, 0, 0, 1)">"</span> with driver <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">bridge</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
Creating lnmp</span>-<span style="color: rgba(0, 0, 0, 1)">php ...
Creating lnmp</span>-php ... <span style="color: rgba(0, 0, 255, 1)">done</span><span style="color: rgba(0, 0, 0, 1)">
Creating lnmp</span>-<span style="color: rgba(0, 0, 0, 1)">nginx ...
Creating lnmp</span>-nginx ... <span style="color: rgba(0, 0, 255, 1)">done</span><span style="color: rgba(0, 0, 0, 1)">
Attaching to lnmp</span>-php, lnmp-<span style="color: rgba(0, 0, 0, 1)">nginx
lnmp</span>-nginx | nginx: host not found <span style="color: rgba(0, 0, 255, 1)">in</span> upstream <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">php</span><span style="color: rgba(128, 0, 0, 1)">"</span> <span style="color: rgba(0, 0, 255, 1)">in</span> /usr/local/nginx/conf/vhost/www.conf:<span style="color: rgba(128, 0, 128, 1)">7</span><span style="color: rgba(0, 0, 0, 1)">
lnmp</span>-nginx exited with code <span style="color: rgba(128, 0, 128, 1)">1</span></pre>
</div>
<p>参数external_links连接的外部php服务并没有启动,所以nginx还是启动报错</p><br><br>
来源:https://www.cnblogs.com/jsonhc/p/7823286.html
頁:
[1]