Docker允许通过外部访问容器或者容器之间互联的方式来提供网络服务。

以下操作通过myfirstapp镜像模拟,如何制作myfirstapp镜像请点击此处

1、外部访问容器
容器启动之后,容器中可以运行一些网络应用,通过-p或-P参数来指定端口映射。
a、用-P(大写)标记时,docker会随机选择一个端口映射到容器内部开放的网络端口上。

$ docker run -d -P myfirstapp python app.py
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dbcf5d3290ba myfirstapp "python app.py" seconds ago Up seconds 0.0.0.0:->/tcp quizzical_engelbart

此时访问本机的32770端口就可以访问到容器内web应用提供的界面。

$ curl http://192.168.1.160:32770/
<h3>Hello HELLO!</h3><b>Hostname:</b> dbcf5d3290ba<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>

也可以使用docker logs来查看应用的信息

$ docker logs dbcf5d3290ba
* Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
192.168.1.5 - - [/Mar/ ::] "GET / HTTP/1.1" -
192.168.1.5 - - [/Mar/ ::] "GET /favicon.ico HTTP/1.1" -
192.168.1.160 - - [/Mar/ ::] "GET / HTTP/1.1" -
192.168.1.5 - - [/Mar/ ::] "GET / HTTP/1.1" -

b、使用-p(小写)标记时则可以指定要映射的端口,并且在一个指定端口上只可以绑定一个容器,支持的格式有:

ip:hostport:containerport
ip::containerport
hostport:containerport $ docker run -d -p : myfirstapp python app.py
$ docker run -d -p : myfirstapp python app.py
$ curl http://192.168.1.160:4000/
<h3>Hello HELLO!</h3><b>Hostname:</b> f43ed2810353<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>
$ curl http://192.168.1.160:4001/
<h3>Hello HELLO!</h3><b>Hostname:</b> f43ed2810353<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>

可以看到本地4000端口已经被映射,换一个端口4001也被映射。

docker默认会映射本地所有的地址。现在我们来尝试一下映射到指定地址的指定端口

$ docker run -d -p 127.0.0.1:: myfirstapp python app.py
$ curl http://127.0.0.1:4000/ ##访问通过
$ curl http://localhost:4000/ ##访问通过
$ curl http://192.168.1.160:4000/ ##访问拒绝
curl: () Failed connect to 192.168.1.160:; 拒绝连接

然后要访问容器中的应用只能通过127.0.0.1这个ip访问。

接下来是绑定本机的任意端口到容器的80端口,随机分配一个端口

$ docker run -d -p 127.0.0.1:: myfirstapp python app.py
$ docker ps ##127.0.0.1:->/tcp
$ curl http://127.0.0.1:32770/ ##访问通过
$ curl http://localhost:32770/ ##访问通过
$ curl http://192.168.1.160:32770/ ##访问拒绝

还可以指定通信协议

docker run -d -p :/udp myfirstapp python app.py

2.查看容器绑定和映射的端口及Ip地址

$ docker port 44de1b0b5312(容器ID)
/tcp -> 127.0.0.1:

3.注意事项
a.docker inspect查看容器自己的内部网络和ip地址

$ docker inspect 44de1b0b5312(容器ID)

b.容器启动绑定多IP

$ docker run -d -p : -p : myfirstapp python app.py #容器ID:44e703c1279a
$ docker port 44e703c1279a
/tcp -> 0.0.0.0:
/tcp -> 0.0.0.0:

Docker容器绑定外部IP和端口的更多相关文章

  1. docker容器配置独立ip

    一般安装docker后都会通过端口转发的方式使用网络,比如 “-p 2294:22” 就将2294抓发到22端口来提供sftp服务,这样使用起来没有问题.但端口号很难记忆,如果前边有nginx等抓发工 ...

  2. 为docker容器设置独立ip

    docker 1.12使用新版macvlan设置与宿主机同网段ip ****************************************** 由于开发的一些特殊需求,需要将容器部署在与宿主 ...

  3. docker容器分配静态IP

    最近因为工作要求需要用学习使用docker,最后卡在了网络配置这一块.默认情况下启动容器的时候,docker容器使用的是bridge策略比如: docker run -ti ubuntu:latest ...

  4. 关于docker容器访问的主机的端口问题

    docker容器需要访问主机的,不能使用127.0.0.1,127.0.0.1访问的是docker容器不是主机: docker容器创建时会分配一个主机ip,可在主机使用命令 docker inspec ...

  5. 为Docker容器配置固定IP

    当docker以桥接的方式启动容器时,容器内部的IP是经过DHCP获取的,例如:172.17.0.8/32,且每重启依次IP都会发生变动.某些特殊的情况下,需要容器内有自己固定的一个内部IP.我的实现 ...

  6. 如何获取 docker 容器(container)的 ip 地址

    1. 进入容器内部后 cat /etc/hosts 会显示自己以及(– link)软连接的容器IP 2.使用命令 docker inspect --format '{{ .NetworkSetting ...

  7. 如何获取 docker 容器(container)的 ip 地址(转)

    1. 进入容器内部后 cat /etc/hosts 会显示自己以及(– link)软连接的容器IP 2.使用命令 docker inspect --format '{{ .NetworkSetting ...

  8. 为Docker容器设置静态IP

    此文已由作者袁欢授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 创建docker容器 docker run -it --name=yh -h yh --net=none de ...

  9. 解决docker容器启动时候无法映射端口的问题

    当我们停止防火墙后,docker容器启动映射端口可能无法映射端口,这个时候需要重建docker0网桥. 详细的错误是这样的: docker: Error response from daemon: d ...

随机推荐

  1. squid代理允许FTP访问设置

    # TAG: acl # Defining an Access List ============================= #Default: # acl all src all # #Re ...

  2. 31.Mysql复制

    31.Mysql复制复制是指将主数据库的DDL和DML操作通过二进制日志传到从数据库上,然后在从数据库上对重做日志,从而使从库与主库保持同步.Mysql支持一台主库同时向多台从库复制,从库也可以作为其 ...

  3. c++沉思录 学习笔记 第五章 代理类

    Vehicle 一个车辆的虚基类 class Vehicle {public: virtual double weight()const = 0; virtual void start() = 0; ...

  4. websocket的简单使用

    一 轮询 什么是轮询:设置每一段时间去访问一次服务器,然后服务器返回最新的数据.这样服务器的压力会非常的大,并且还会有延迟.适用于小型程序. 实现:再客户端的页面设置一个定时发送请求的任务,每个这段时 ...

  5. VMware虚拟机网络设置

    背景介绍 在用 VMware workstation 安装好虚拟机后,需要给虚拟机配置网络,配置网络的方法有桥接.NAT.    采用桥接的方法需要占据物理机网段的ip地址,可能会与物理机同一网段的其 ...

  6. Unity3D使用EasyMovieTexture插件播放视频

    Unity3D对于视频的播放兼容个人感觉很差劲,之前写过一篇使用Unity3D自己自带的一些功能去播放视频,链接如下: http://www.cnblogs.com/xiaoyulong/p/8627 ...

  7. javascript(作业九)

    1.javascript简介: JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端 ...

  8. Maths | 二次型求偏导

  9. _ZNote_Mac_技巧_QuickLook功能扩展

    QuicLook(快速查看)是macOS一项非常方便的独有功能: 当选中一个文件,只需要按下空格键即可查看其内容,在按下空格退出QuickLook, 不需要启动再关闭任何软件. 默认支持大部分视频.音 ...

  10. 前端vue框架 父组件与子组件之间的相互调用

    子组件调用父组件东西: 1.在父组件与子组件契合的标签的的template模板中绑定 v-bind:自定义一个名字=“要调用的名字” 2.在子组件的script中props:["自定义的名字 ...