时间:2021-05-19
Docker允许通过外部访问容器或者容器之间互联的方式来提供网络服务。
以下操作通过myfirstapp镜像模拟,如何制作myfirstapp镜像请点击此处。
1、外部访问容器
容器启动之后,容器中可以运行一些网络应用,通过-p或-P参数来指定端口映射。
a、用-P(大写)标记时,docker会随机选择一个端口映射到容器内部开放的网络端口上。
$ docker run -d -P myfirstapp python app.py $ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESdbcf5d3290ba myfirstapp "python app.py" 4 seconds ago Up 4 seconds 0.0.0.0:32770->80/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 - - [29/Mar/2018 06:17:34] "GET / HTTP/1.1" 200 -192.168.1.5 - - [29/Mar/2018 06:17:34] "GET /favicon.ico HTTP/1.1" 404 -192.168.1.160 - - [29/Mar/2018 06:17:43] "GET / HTTP/1.1" 200 -192.168.1.5 - - [29/Mar/2018 06:18:59] "GET / HTTP/1.1" 200 -b、使用-p(小写)标记时则可以指定要映射的端口,并且在一个指定端口上只可以绑定一个容器,支持的格式有:
ip:hostport:containerport ip::containerport hostport:containerport$ docker run -d -p 4000:80 myfirstapp python app.py$ docker run -d -p 4001:80 myfirstapp python app.py$ curl http://192.168.1.160:4000/Hello HELLO!Hostname: f43ed2810353Visits:cannot connect to Redis, counter disabled$ curl http://192.168.1.160:4001/Hello HELLO! Hostname:f43ed2810353Visits:cannot connect to Redis, counter disabled可以看到本地4000端口已经被映射,换一个端口4001也被映射。
docker默认会映射本地所有的地址。现在我们来尝试一下映射到指定地址的指定端口
$ docker run -d -p 127.0.0.1:4000:80 myfirstapp python app.py$ curl http://127.0.0.1:4000/ ##访问通过$ curl http://localhost:4000/ ##访问通过$ curl http://192.168.1.160:4000/ ##访问拒绝curl: (7) Failed connect to 192.168.1.160:4000; 拒绝连接然后要访问容器中的应用只能通过127.0.0.1这个ip访问。
接下来是绑定本机的任意端口到容器的80端口,随机分配一个端口
$ docker run -d -p 127.0.0.1::80 myfirstapp python app.py$ docker ps ##127.0.0.1:32770->80/tcp$ curl http://127.0.0.1:32770/ ##访问通过$ curl http://localhost:32770/ ##访问通过$ curl http://192.168.1.160:32770/ ##访问拒绝还可以指定通信协议
docker run -d -p 5003:80/udp myfirstapp python app.py2.查看容器绑定和映射的端口及Ip地址
$ docker port 44de1b0b5312(容器ID)80/tcp -> 127.0.0.1:327703.注意事项
a.docker inspect查看容器自己的内部网络和ip地址
$ docker inspect 44de1b0b5312(容器ID)b.容器启动绑定多IP
$ docker run -d -p 5005:5000 -p 5006:80 myfirstapp python app.py #容器ID:44e703c1279a$ docker port 44e703c1279a5000/tcp -> 0.0.0.0:500580/tcp -> 0.0.0.0:5006以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
外部访问随机映射端口使用-P标记,Docker会随机映射一个49000-49900的端口到内部容器开放的网络端口dockerrun-d-Ptraining/we
最近在学习docker,今天了解了Docker端口映射,给自己留个小笔记,也分享给大家为什么要端口映射?在启动容器时,如果不配置宿主机器与虚拟机的端口映射,外部
docker-compose中有两种方式可以暴露容器的端口:ports和expose。portsports暴露容器端口到主机的任意端口或指定端口,用法:?123
外部访问容器容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过-P或-p参数来指定端口映射。-P标记时Docker会随机映射一个49000~499
docker容器在启动的时候,如果不指定端口映射参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。亦可使用Dockerfile文件中的EXPOSE指