docker之端口映射使用及说明

 更新时间:2026年02月07日 14:18:59   作者:wyx学习k8s  
文章介绍了如何使用端口映射和互联网机制实现容器的访问和互联,端口映射通过参数-p或-P来指定端口映射,可以映射到指定地址的指定端口或任意端口,还可以指定UDP端口,互联网机制通过容器互联实现容器之间的快速交互,通过--link参数将容器连接起来,可以指定别名

1.端口映射实现容器访问

从外部访问容器应用

当启动容器的时候,如果不指定对应参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。

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

1.1.1 当使用-P参数时

Docker会随机分配一个49000~49900的端口到内部容器开放的网络端口:

docker run -d -P training/webapp python app.py

[root@k8s-master ~]# docker run -d -P training/webapp python app.py
009be6617d347d4d1d12980a369a377f67cd4f792cb6e74301f05a17db9e95ac
[root@k8s-master ~]# docker ps -l
CONTAINER ID   IMAGE             COMMAND           CREATED         STATUS         PORTS                                         NAMES
009be6617d34   training/webapp   "python app.py"   7 seconds ago   Up 5 seconds   0.0.0.0:32769->5000/tcp, :::32769->5000/tcp   cranky_jang
#本地分配的32769端口映射到docker的5000端口

1.1.2 当使用-p时,需要指定映射端口

docker run -d -p 5000:5000 training/webapp python app.py

#先删除之前-P 映射的容器
[root@k8s-master ~]# docker stop 009be6617d34 && docker rm 009be6617d34
009be6617d34
009be6617d34
[root@k8s-master ~]# docker run -d -p 5000:5000 training/webapp python app.py
7e4f478a7772417701aade64b358e957090dc1d804b637607596ec46b01db645

1.1.3 还可以映射到指定地址的指定端口

docker run -d -p 127.0.0.1:5001:5001 training/webapp python app.py

[root@k8s-master ~]# docker run -d -p 127.0.0.1:5001:5001 training/webapp python app.py
88b77309c1b0c4516d16aafdeb8b524e9c9f878a9a08acefc71dcb704cd4fc8a

1.1.4 还可以映射到指定地址的任意端口

docker run -d -p 127.0.0.1::5000 training/webapp python app.py

[root@k8s-master ~]# docker run -d -p 127.0.0.1::5000 training/webapp python app.py
3e457d7f58de0c6ca911c09dd9f62bb742437180f7cdca4e37481ed3c87050fa

1.1.5 还可以指定udp端口

docker run -d -p 127.0.0.1:5001:5001/udp training/webapp python app.py

[root@k8s-master ~]# docker run -d -p 127.0.0.1:5001:5001/udp training/webapp python app.py
1e3f7c65fd966906efeb955a6e6d8bedc1f6c2cd1910322542659b6ea27b7a2b

1.1.6 查看映射端口配置

docker port $container-id

[root@k8s-master ~]# for i in `docker ps -aq`
> do
> docker port $i
> done
5001/udp -> 127.0.0.1:5001
5000/tcp -> 127.0.0.1:32768
5001/tcp -> 127.0.0.1:5001
5000/tcp -> 0.0.0.0:5000
5000/tcp -> [::]:5000

2.互联网机制实现便携互访

容器的互联(linking)是一种让多个容器中的应用进行快速交互的方式。

它会在源和接受容器之间创建连接关系,接受容器可以通过容器名称快速访问到源容器,而不用指定具体的IP地址。

2.1 自定义容器名称

用--name $container_name选项来对容器命名

docker run -d -P --name web training/webapp python app.py

[root@k8s-master ~]# docker run -d -P --name web training/webapp python app.py
516c331f26bdb1300b187f9436790e12749bc168b8fb0b9642fc5a7359852a3a

2.2 容器互联

我们在创建一个数据库容器

docker run -d --name db training/postgres

[root@k8s-master ~]# docker run -d --name db training/postgres
Unable to find image 'training/postgres:latest' locally
latest: Pulling from training/postgres
[DEPRECATION NOTICE] Docker Image Format v1, and Docker Image manifest version 2, schema 1 support will be removed in an upcoming release. Suggest the author of docker.io/training/postgres:latest to upgrade the image to the OCI Format, or Docker Image manifest v2, schema 2. More information at https://docs.docker.com/go/deprecated-image-specs/
a3ed95caeb02: Pull complete 
6e71c809542e: Pull complete 
2978d9af87ba: Pull complete 
e1bca35b062f: Pull complete 
500b6decf741: Pull complete 
74b14ef2151f: Pull complete 
7afd5ed3826e: Pull complete 
3c69bb244f5e: Pull complete 
d86f9ec5aedf: Pull complete 
010fabf20157: Pull complete 
Digest: sha256:a945dc6dcfbc8d009c3d972931608344b76c2870ce796da00a827bd50791907e
Status: Downloaded newer image for training/postgres:latest
794093c32161c164ae537ab8c72207d6e349670725d07304cc0b0d26b5500d29

删除之前创建的web容器

docker rm -f web

[root@k8s-master ~]# docker rm -f web
web

然后再重新创建个web容器,将它连接到db容器

docker run -d -P --name web --link db:db training/webapp python app.py

[root@k8s-master ~]# docker run -d -P --name web --link db:db training/webapp python app.py
76ba721e0203b527bb81c03316a6d39e722933724389080f8555aa51439b61fa

此时,db容器和web容器建立了互联关系

--link 参数格式为--link name:alias,其中name是要链接的容器的名称,alias是别名。

不过现在不建议用--link,就不过多介绍了

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • docker报错x509:certificate has expired or is not yet valid问题及解决

    docker报错x509:certificate has expired or 

    这篇文章主要介绍了docker报错x509:certificate has expired or is not yet valid问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • docker安装rocketMQ教程(最详细)

    docker安装rocketMQ教程(最详细)

    这篇文章主要介绍了docker安装rocketMQ教程(最详细),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Docker运行模式之-d和-it的区别与选择详细对比

    Docker运行模式之-d和-it的区别与选择详细对比

    这篇文章主要介绍了Docker运行模式之-d和-it的区别与选择详细对比的相关资料,Docker中-d用于后台运行服务,不阻塞终端;-it提供交互终端,支持用户操作,需要的朋友可以参考下
    2025-05-05
  • Centos Docker1.12 远程Rest api访问的配置方法

    Centos Docker1.12 远程Rest api访问的配置方法

    这篇文章主要介绍了Centos Docker1.12 远程Rest api访问的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-01-01
  • Docker容器输入汉字触发自动补全问题

    Docker容器输入汉字触发自动补全问题

    Linux系统中,当终端出现中文乱码通常是由于缺少中文字符集和字体,安装中文字体和设置合适的字符集zh_CN.utf8,可以有效解决这一问题,首先,通过查看系统支持的字符集了解是否支持中文,然后安装相应字符集,其次,查看并设置当前系统字符集
    2024-10-10
  • Docker部署Zookeeper分布式协调器的实现

    Docker部署Zookeeper分布式协调器的实现

    Zookeeper是分布式数据一致性的关键技术,支持单机和集群部署,集群部署需奇数节点,,通过Docker部署方便,支持配置文件映射和动态角色变更,感兴趣的可以了解一下
    2024-11-11
  • docker安装prometheus和grafana的详细过程

    docker安装prometheus和grafana的详细过程

    prometheus通过各种Exporter采集到监控数据,然后存储进prometheus中,以供查询展示,这篇文章主要介绍了docker安装prometheus和grafana,需要的朋友可以参考下
    2023-02-02
  • Centos7安装docker、docker-compose实践过程

    Centos7安装docker、docker-compose实践过程

    这篇文章主要介绍了Centos7安装docker、docker-compose实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-07-07
  • Docker与docker-compose中volume参数的使用方式

    Docker与docker-compose中volume参数的使用方式

    文章介绍了Docker中的数据卷Volume的概念及其在宿主机和容器之间的数据共享和持久化,它详细说明了两种数据挂载方式:通过宿主机绝对路径挂载和通过卷标映射挂载,包括匿名挂载和具名挂载,同时,文章还展示了如何通过docker命令查看数据卷的宿主机目录
    2024-11-11
  • Docker中的COPY指令和ADD指令详解

    Docker中的COPY指令和ADD指令详解

    COPY 和 ADD 都是 Dockerfile 中的指令,有着类似的作用。它们允许我们将文件从特定位置复制到 Docker 镜像中,这篇文章主要介绍了Docker中的COPY指令和ADD指令,需要的朋友可以参考下
    2022-06-06

最新评论