2025年4月1日 星期二 乙巳(蛇)年 正月初二 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 云技术 > Docker

Docker 端口映射和容器间互访问

时间:12-14来源:作者:点击数:12

一、端口映射

默认情况下,宿主机是无法访问容器内部网络的,但是可以使用端口映射来解决这个问题,在之前文章中已经提到过 Docker 的端口映射。主要通过 docker run 跟 -P(大写) 或 -p(小写)参数来实现。docker run -P 会把容器中监听的端口随机绑定到宿主机的可用端口上:

  • docker run -p HostPort:ContainerPort 可以让我们指定需要映射的容器和宿主机端口:

在做端口映射时,也可以指定容器的网络传输协议,默认是 tcp 协议,如果是 udp 协议,则可以显示指定:

  • [root@localhost ~]# docker run -d -p 127.0.0.1:8080:80/udp nginx:latest

二、容器互联

如果说端口映射解决了宿主机和容器之间的互访问问题,那另一个问题就是容器和容器之间如何互访问。

docker run 的 --link 参数可以指定连接到一个容器,从而使得容器之间可以通过容器名来访问。

下面以搭建 nginx + php-fpm 为例演示容器间互访问。

  • 我这里分别有一个 php-fpm 和 nginx 镜像。
  • 1、先启动php-fpm 容器, 并使用 --name 参数指定容器名
  • [root@localhost ~]# docker run -d --name php-fpm php:5.6.32-fpm
  • 3e4b04174da9a91f77d9560113d3021f90a9638165968ccff44fede6c7961871
  • 每一个运行中的Docker容器都有一块虚拟网卡和一个内网ip,我们可以进到上面的容器来查看:
  • 先安装ifconfig命令,然后使用ifconfig查看ip地址信息
  • [root@localhost ~]# docker exec -it php-fpm /bin/bash
  • root@3e4b04174da9:/var/www/html# apt-get update
  • root@3e4b04174da9:/var/www/html# apt-get install net-tools
  • root@3e4b04174da9:/var/www/html# ifconfig
  • 可以看到php-fpm容器有一块 eth0 网卡, 其ip地址为 172.17.0.54,还可以查看hosts信息
  • root@3e4b04174da9:/var/www/html# cat /etc/hosts
  • 容器ID解析到了该容器局域网IP
  • 2、再启动nginx容器,同样指定一个名字,并使用 --link 连接到之前的php-fpm容器。
  • [root@localhost ~]# docker run -d -p 8080:80 --name nginx --link php-fpm nginx:latest
  • 03fe0d3fbd43b5db157992703f70dd6eff4555c4e49c3620e7a212c81824778f
  • 此时 nginx 容器就连接到 php-fpm 容器上了,可以进入nginx容器查看相关环境变量和hosts信息
  • [root@localhost ~]# docker exec -it nginx /bin/bash
  • root@03fe0d3fbd43:/# env
  • 能够看到 nginx 容器中有很多 PHP_FPM相关的环境变量,而hosts中除了有本身容器ID与自身IP地址的解析关系外,
  • 还包含了php-fpm 容器的解析,我们可以使用 ping 或 telnet 命令查看两个容器之间的网络是否畅通。
  • 先安装 ping 和 telnet :
  • root@03fe0d3fbd43:/# apt-get install iputils-ping
  • ...........
  • root@03fe0d3fbd43:/# apt-get install telnet
  • ...........
  • root@03fe0d3fbd43:/# ping php-fpm
  • 看到连接了容器之后可以直接用容器名来访问,非常方便
  • 现在我们可以配置 nginx 的 fastcgi, 转发php请求到 php-fpm 容器
  • 先安装VI:
  • root@03fe0d3fbd43:/# apt-get install vim-tiny
  • 然后修改 /etc/nginx/conf.d/default.nginx
  • 记得修改好后 reload 一下nginx
  • root@03fe0d3fbd43:/# /etc/init.d/nginx reload
  • 在php-fpm容器的 /php 目录下创建一个 test.php,并添加相应的权限
  • [root@localhost ~]# docker exec -it php-fpm /bin/bash
  • root@0805ea04f2c8:/var/www/html# mkdir /php
  • root@0805ea04f2c8:/var/www/html# echo '<?php echo time() . "\n";' > /php/test.php
  • root@0805ea04f2c8:/var/www/html# chmod 777 /php/test.php
  • 然后在宿主机下访问该php文件:
  • [root@localhost ~]# curl '127.0.0.1:8080/test.php'
  • 1509695115
  • [root@localhost ~]# curl '127.0.0.1:8080/test.php'
  • 1509695138
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐