现在我们已经可以熟练的使用docker命令操作镜像和容器,并学会了如何进入到容器中去,那么实际的工作中,我们通常是在Docker中部署服务,我们需要在外部通过IP和端口进行访问的,那么如何访问到Docker的内部服务呢?

在后面我们会有专门的章节来讲解Docker的网络配置,这里我们先学习一个比较简单的通过网络访问容器的方法,就是端口映射。

容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射。

随机映射

当使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。

下面我们以一个nginx的容器为例子来测试一下-P的功能,大家可以使用search搜索下nginx镜像,我们使用官方的nginx镜像来启动一个容器。

[root@linux-node1 ~]# docker search nginx

这次我们不执行docker pull。直接来启动容器,你会发现docker会先查找你本地是否有该镜像,如果没有它会自动下载后,然后启动容器。

[root@linux-node1 ~]# docker run -d -P nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
6ae821421a7d: Pull complete
da4474e5966c: Pull complete
eb2aec2b9c9f: Pull complete
Digest: sha256:dd2d0ac3fff2f007d99e033b64854be0941e19a2ad51f174d9240dda20d9f534
Status: Downloaded newer image for nginx:latest
ecf14adb9dec09555ae31673753093e03941c41d917669dd1f254b51fdec7b51

我们又学习了一个新的参数-d可以让容器直接在后台运行

[root@linux-node1 ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6819734a680c nginx "nginx -g 'daemon off" About an hour ago Up About an hour
0.0.0.0:32769->80/tcp, 0.0.0.0:32768->443/tcp hungry_mayer

可以看到,随机映射了一个32769端口到容器的80端口。下面就可以直接访问了。

[root@linux-node1 ~]# curl --head http://192.168.56.11:32769/
HTTP/1.1 200 OK
Server: nginx/1.11.3
Date: Fri, 02 Sep 2016 17:44:14 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 26 Jul 2016 14:54:48 GMT
Connection: keep-alive
ETag: "579779b8-264"
Accept-Ranges: bytes

同样的,可以通过 docker logs 命令来查看应用的日志信息。

[root@linux-node1 ~]# docker logs hungry_mayer

192.168.56.11 - - [02/Sep/2016:17:44:01 +0000] "HEAD / HTTP/1.1" 200 0 "-"
"curl/7.29.0" "-" 192.168.56.11 - - [02/Sep/2016:17:44:06 +0000] "GET / HTTP/1.1" 200 612 "-"
"curl/7.29.0" "-" 192.168.56.11 - - [02/Sep/2016:17:44:14 +0000] "HEAD / HTTP/1.1" 200 0 "-"
"curl/7.29.0" "-"

是不是老使用随机的名字和ID操作容器很不方面,那么下面我们再创建容器的时候,一定要给它定义一个可读的名字。

指定端口映射

-p(小写的)则可以指定要映射的端口,并且,在一个指定端口上只可以绑定一个容器。支持的格式有以下三种:

  • hostPort:containerPort。
  • ip:hostPort:containerPort
  • ip::containerPort

映射所有IP地址的指定端口

使用 hostPort:containerPort,将本地的 80 端口映射到Nginx容器的 80 端口

[root@linux-node1 ~]# docker run -d -p 80:80 --name nginx-demo1 nginx

此时默认会绑定本地所有接口上的所有地址。注意镜像名称需要放到最后。

映射到指定地址的指定端口

如果你宿主机拥有多个IP地址,可以使用 ip:hostPort:containerPort 格式指定映射使用一个特定地址,比如将Nginx的80端口绑定到本地IP地址的81端口。

[root@linux-node1 ~]# docker run -d -p 192.168.56.11:81:80 --name nginx-demo2
nginx

映射到指定地址的任意端口

使用 ip::containerPort 绑定Nginx80端口到本地192.168.56.11的任意端口,本地主机会自动分配一个端口。

[root@linux-node1 ~]# docker run -d -p 192.168.56.11::80 --name nginx-demo3 nginx

使用 udp 标记来指定 udp 端口

[root@linux-node1 ~]# docker run -d -p 192.168.56.11:53:53/udp –name dns-udp

绑定多个端口

如果你想绑定Docker容器里面的多个端口,可以使用多次使用-p 标记。

[root@linux-node1 ~]# docker run -d -p 80:80 -p 443:443 nginx

查看映射端口配置

使用 docker port 来查看当前映射的端口配置,也可以查看到绑定的地址

[root@linux-node1 ~]# docker port nginx-demo1
80/tcp -> 0.0.0.0:80

4、Docker网络访问的更多相关文章

  1. docker网络访问(三)

    docker网络访问 ifconfig查看网卡,启动docker的时候,docker会帮我们创建一个docker0的网桥. 1.随机映射 docker run -P 2.指定映射 -p hostPor ...

  2. docker网络访问

    一 docker网络访问 描述: 在启动容器的时候,如果不指定对应的参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的.当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-P或者-p ...

  3. docker的网络访问

    Docker的网络访问: #systemctl  start docker #ifconfig [root@zizhen02 ~]# ifconfig docker0: flags=4099<U ...

  4. Docker网络和存储

    本节内容: Docker网络访问 端口映射 数据管理 一.Docker网络访问 1. docker自带的网络 docker network ls:列出当前docker中已有的网络 docker net ...

  5. docker网络-如何让外部网络访问容器资源

    docker网络-如何让外部网络访问容器资源 安装httpd 服务: docker:/root# docker exec -it f63b2633d146 bash bash-4.1# yum ins ...

  6. Docker 外部访问容器Pp、数据管理volume、网络network 介绍

    Docker 外部访问容器Pp.数据管理volume.网络network 介绍 外部访问容器 容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来 指定端口映射. ...

  7. 理解Docker(5):Docker 网络

    本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

  8. docker网络配置方法总结

    docker启动时,会在宿主主机上创建一个名为docker0的虚拟网络接口,默认选择172.17.42.1/16,一个16位的子网掩码给容器提供了65534个IP地址.docker0只是一个在绑定到这 ...

  9. Docker网络详解

         当 Docker 启动时,会自动在主机上创建一个 docker0 虚拟网桥,实际上是 Linux 的一个 bridge,可以理解为一个软件交换机.它会在挂载到它的网口之间进行转发.      ...

随机推荐

  1. 寻找cookie之旅

    公司接口自动化,需要用到cookie.这个cookie可以从login的响应header中取到. 直接用python调这个接口,返回的响应header是这个: {'Date': 'Thu, 15 Au ...

  2. MyEclipse中最常用的快捷键大全

    1. [ALT+/]    此快捷键为用户编辑的好帮手,能为用户提供内容的辅助,不要为记不全方法和属性名称犯愁,当记不全类.方法和属性的名字时,多体验一下[ALT+/]快捷键带来的好处吧. 2. [C ...

  3. VS2015 定时服务及控制端

    一.  服务端 如下图—新建项目—经典桌面—Windows服务—起名svrr 2. 打到server1 改名为svrExecSqlInsert 右击对应的设计界面,添加安装服务目录结构如图 3. sv ...

  4. Python生成腾讯云实时音视频的UserSig签名

    1.UserSig 简介 官方文档链接:https://cloud.tencent.com/document/product/647/16790 腾讯云 IM 的前身是 QQ 的即时通讯消息系统,我们 ...

  5. ssh隧道实现端口转发

    ssh隧道实现端口转发 本地转发 # 本地转发 ssh -g -f -N -L : root@ # -L 本地端口转发,转发172.16.1.1主机可以访问的资源,这里为转发172.16.1.2的80 ...

  6. Tools: python 安装

    python 安装 python pip解压,cmd进入目录,python setup.py install 环境变量:PATHD:\Python\Python37\Scripts\;D:\Pytho ...

  7. 43. 守护线程 和 join方法

    1.守护线程(后台线程):            我们在使用一款软件的时候,有的软件会让我们在不知道的情况下下载一些东西,那么这个就是后台线程.            一般用于提高软件的下载量(也就是 ...

  8. 【Problem】xampp in ubuntu下命令行启动mysql报错: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/opt/lampp/var/mysql/mysql.sock' (2)

    xampp in ubuntu下命令行启动mysql报错: reddevil@reddevil-Lenovo:/opt/lampp$ ./bin/mysql -u root -p Enter pass ...

  9. js面向对象的几种方式----工厂模式、构造函数模式、原型模式

    对象的字面量 var obj={} 创建实例对象 var obj=new Object() 工厂模式 function cPerson(name,sex,age){ var o = new Objec ...

  10. CSS案例2(一个简单的新闻网页)

     知识点: 1.一般网页不用纯黑,用淡灰色  3c3c3c 2.text-align: center;  /*  文字水平居中 */ 3.font-weight: normal;  /* 清除加粗效果 ...