Docker容器绑定外部IP和端口
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和端口的更多相关文章
- docker容器配置独立ip
一般安装docker后都会通过端口转发的方式使用网络,比如 “-p 2294:22” 就将2294抓发到22端口来提供sftp服务,这样使用起来没有问题.但端口号很难记忆,如果前边有nginx等抓发工 ...
- 为docker容器设置独立ip
docker 1.12使用新版macvlan设置与宿主机同网段ip ****************************************** 由于开发的一些特殊需求,需要将容器部署在与宿主 ...
- docker容器分配静态IP
最近因为工作要求需要用学习使用docker,最后卡在了网络配置这一块.默认情况下启动容器的时候,docker容器使用的是bridge策略比如: docker run -ti ubuntu:latest ...
- 关于docker容器访问的主机的端口问题
docker容器需要访问主机的,不能使用127.0.0.1,127.0.0.1访问的是docker容器不是主机: docker容器创建时会分配一个主机ip,可在主机使用命令 docker inspec ...
- 为Docker容器配置固定IP
当docker以桥接的方式启动容器时,容器内部的IP是经过DHCP获取的,例如:172.17.0.8/32,且每重启依次IP都会发生变动.某些特殊的情况下,需要容器内有自己固定的一个内部IP.我的实现 ...
- 如何获取 docker 容器(container)的 ip 地址
1. 进入容器内部后 cat /etc/hosts 会显示自己以及(– link)软连接的容器IP 2.使用命令 docker inspect --format '{{ .NetworkSetting ...
- 如何获取 docker 容器(container)的 ip 地址(转)
1. 进入容器内部后 cat /etc/hosts 会显示自己以及(– link)软连接的容器IP 2.使用命令 docker inspect --format '{{ .NetworkSetting ...
- 为Docker容器设置静态IP
此文已由作者袁欢授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 创建docker容器 docker run -it --name=yh -h yh --net=none de ...
- 解决docker容器启动时候无法映射端口的问题
当我们停止防火墙后,docker容器启动映射端口可能无法映射端口,这个时候需要重建docker0网桥. 详细的错误是这样的: docker: Error response from daemon: d ...
随机推荐
- centos7 下安装pycharm
CentOS 7环境下Pycharm安装流程记录: 1.准备安装文件: 方法1: 使用内置火狐浏览器访问下载最新格式为tar.gz的压缩包 网址:https://www.jetbrains.com/p ...
- playframework链接MySQL数据库的问题
Scala 在米国已经发展的如火如荼,有些人甚至说Scala将成为未来语言的头号交椅.简洁的代码和表达式的写法让很多人倍感舒适,函数式和面向对象的编程范式也让其能在多种场合游刃有余的被使用.加之它是跑 ...
- C# Winform 登录中的忘记密码及自动登录
本地保存登录账号实现忘记密码及自动登录 #region 删除本地自动登录及记住密码信息 /// <summary> /// 删除本地自动登录及记住密码信息 /// </summary ...
- 修改chrome浏览器默认css样式的方法
最近重新用起了ubuntu kylin,然后又碰到之前让我感到有些难受的一个小问题:用chrome浏览部分网页时,一部分粗体字十分难看,就像是宋体直接加粗那样. 之前就觉得这样看起来很难受,但是找到的 ...
- poj 3087 Shuffle'm Up (模拟过程)
Description A common pastime for poker players at a poker table is to shuffle stacks of chips. Shuff ...
- sax 动态切换 抓取感兴趣的内容(把element当做documnet 处理)
由switch 类触发事件 import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.hel ...
- 实战C++对象模型之成员函数调用
先说结论:C++的类成员函数和C函数实质是一样的,只是C++类成员函数多了隐藏参数this. 通过本文的演示,可以看见这背后的一切,完全可C函数方式调用C++类普通成员函数和C++类虚拟成员函数. 为 ...
- Django的一些隐性经验
隐性经验 前后信息的沟通 url中的参数 get获取 这个参数可以写在URL当中(可以写多个,写在这里的get函数需要有相应的参数去获取).,也可以在模版中添加(通过?若是直接写则表示在当前的URL中 ...
- Alpha冲刺(5/10)——2019.4.28
所属课程 软件工程1916|W(福州大学) 作业要求 Alpha冲刺(5/10)--2019.4.28 团队名称 待就业六人组 1.团队信息 团队名称:待就业六人组 团队描述:同舟共济扬帆起,乘风破浪 ...
- Baidu WebUploader 前端文件上传组件的使用
简介 WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流I ...