千家信息网

docker端口映射与容器的互访

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,端口映射与容器关联docker除了通过网络访问外,还提供了两个功能来满足服务访问的基本需求:一个是允许映射容器内应用的服务端口到本地宿主主机;另一个是互联机制实现多个容器间通过容器名来快速访问。端口映
千家信息网最后更新 2026年11月03日docker端口映射与容器的互访

端口映射与容器关联

docker除了通过网络访问外,还提供了两个功能来满足服务访问的基本需求:一个是允许映射容器内应用的服务端口到本地宿主主机;另一个是互联机制实现多个容器间通过容器名来快速访问。

端口映射容器访问

1、从外部访问容器应用,从启动容器的时候,如果不指定对应参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。可以通过-P或-p参数来指定端口映射。
-P:会随机映射一个49000~49900的端口到内部容器开放的网络端口

[root@docker01 ~]# docker run -d -P training/webapp python app.py75b2c32292d290aa3004b5b6cbb49775cc6f360796736473978cc32a682fdad9[root@docker01 ~]# docker ps -lCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES75b2c32292d2        training/webapp     "python app.py"     3 seconds ago       Up 2 seconds        0.0.0.0:32770->5000/tcp   musing_carson

查看应用的信息

[root@docker01 ~]# docker logs -f musing_carson * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

2、映射所有接口地址,使用HostPort:ContainerPort吧本地的5000端口映射到容器的5000端口

[root@docker01 ~]# docker run -d -p 5000:5000 training/webapp python app.py6368e0f567714ad90d2b20ff71afb2231e404b35639055a665cc3715a85f010a

或使用连续的-p绑定多个端口

[root@docker01 ~]# docker run -d -p 5000:5000 -p3000:80 training/webapp python app.py80bfe8e1f7fd53099e3f350c5efd1160a7247d065233965cc2bc2130e2fdcbb2

3、映射到指定地址的指定端口,使用IP:HostPort:ContainerPort格式指定映射使用一个特定地址。

[root@docker01 ~]# docker run -d -p 10.10.17.199:5000:5000 training/webapp python app.pyac228c0f2334a59856d9993e6a3eb652b50eb08ec41cedff87b331aa8d5d5f86[root@docker01 ~]# docker ps -lCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                         NAMESac228c0f2334        training/webapp     "python app.py"     5 seconds ago       Up 5 seconds        10.10.17.199:5000->5000/tcp   eager_noether

4、映射到指定地址的任意端口,使用IP::ContainerPort绑定localhost的任意端口到容器的5000端口,本地主机会自动分配一个端口

[root@docker01 ~]# docker run -d -p 127.0.0.1::5000 training/webapp python app.pye72dec38ae77c113418156c4ad50b601fe31d0a38b4b8f995aabdcfcc510fdcc

使用UDP标记来指定udp端口

[root@docker01 ~]# docker run -d -p 127.0.0.1:5001:5001/udp training/webapp python app.py581ff1531c6b604c1b66ece82c87529a02c8da0b7b19e98bd336122c151b524f

5、查看映射端口配置,使用docker port来查看映射的端口配置

[root@docker01 ~]# docker port laughing_faraday 5000127.0.0.1:32768

互联机制便捷互访

容器的互联是一种让多个容器中的应用进行快捷交互的方式,它会在源和接收容器之间创建连接关系,接收容器可以通过容器名快速访问到源容器,而不用指定具体的IP地址。
1、自定义容器命名,连接系统依据容器的名称来执行。首先需要一个好记的容器命名,虽然不指定系统会默认分配一个,但是指定的好处在于:名称好记,基于应用来取名如web。需要连接其他容器时,也可以使用容器名而不用改变。

[root@docker01 ~]# docker run -d -P --name web training/webapp python app.py6ae6d11614f99762a519d55beb8b38f3fbff667af34be90b33d6a11477b8d99a[root@docker01 ~]# docker ps -lCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES6ae6d11614f9        training/webapp     "python app.py"     7 seconds ago       Up 6 seconds        0.0.0.0:32771->5000/tcp   web

2、容器互联,使用--link参数可以让容器之间安全的进行交互
创建一个新的数据库容器

[root@docker01 ~]# docker run -d --name db training/postgresUnable to find image 'training/postgres:latest' locallylatest: Pulling from training/postgresImage docker.io/training/postgres:latest uses outdated schema1 manifest format. Please upgrade to atibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/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:a945dc6dcfbc8d009c3d972931608344b76c2870ce796da00a827bd50791907eStatus: Downloaded newer image for training/postgres:latest67b752f9c5d6f19f2811674be780673b5475c845be6f43d9b15df139ff01c0fd

删除之前的web容器,然后创建一个新的web容器,把他连接到db容器

[root@docker01 ~]# docker rm -f webweb[root@docker01 ~]# docker run -d -P --name web --link db:db training/webapp python app.pyde3f340d554dd01789859d6dc0fc3a0bb406e3111ca60e27f78da208def08dca

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

[root@docker01 ~]# docker psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMESde3f340d554d        training/webapp     "python app.py"          4 minutes ago       Up 4 minutes        0.0.0.0:32772->5000/tcp   web67b752f9c5d6        training/postgres   "su postgres -c '/us…"   13 minutes ago      Up 13 minutes       5432/tcp                  db

相当于在两个容器之间创建了一个虚拟通道,而且不用映射他们的端口到宿主机上,在启动db容器的时候没有使用-p或-P标记,避免了暴露数据库服务端到外部网络上。
docker通过两种方式为容器公开连接信息
#更新环境变量
#更新/etc/hosts文件
使用env命令来查看web容器的环境变量:

[root@docker01 ~]# docker run --rm --name web2 --link db:db training/webapp envPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binHOSTNAME=2ff63f7eb1d2DB_PORT=tcp://172.17.0.3:5432DB_PORT_5432_TCP=tcp://172.17.0.3:5432DB_PORT_5432_TCP_ADDR=172.17.0.3DB_PORT_5432_TCP_PORT=5432DB_PORT_5432_TCP_PROTO=tcpDB_NAME=/web2/dbDB_ENV_PG_VERSION=9.3HOME=/root

除了环境变量docker还添加了host信息到父容器的/etc/hosts中

[root@docker01 ~]# docker run -t -i --rm --link db:db training/webapp /bin/bashroot@8ed896541b8d:/opt/webapp# cat /etc/hosts127.0.0.1   localhost::1 localhost ip6-localhost ip6-loopbackfe00::0 ip6-localnetff00::0 ip6-mcastprefixff02::1 ip6-allnodesff02::2 ip6-allrouters172.17.0.3  db 67b752f9c5d6172.17.0.4  8ed896541b8droot@8ed896541b8d:/opt/webapp# ping dbPING db (172.17.0.3) 56(84) bytes of data.64 bytes from db (172.17.0.3): icmp_seq=1 ttl=64 time=0.239 ms64 bytes from db (172.17.0.3): icmp_seq=2 ttl=64 time=0.154 ms64 bytes from db (172.17.0.3): icmp_seq=3 ttl=64 time=0.110 ms64 bytes from db (172.17.0.3): icmp_seq=4 ttl=64 time=0.111 ms^C--- db ping statistics ---4 packets transmitted, 4 received, 0% packet loss, time 3000msrtt min/avg/max/mdev = 0.110/0.153/0.239/0.053 ms

用户可以链接多个子容器到父容器,比如可以链接多个web到同一个db容器上。

容器 端口 地址 多个 网络 应用 参数 链接 互联 服务 不用 之间 信息 变量 名称 环境 两个 可以通过 宿主 数据 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广东万易互联网科技有限公司惠州分公司 为想互联网科技怎么样 重庆互联网络科技 互联网科技开发公司 北京禾田雨橡互联网科技 深圳期待互联网科技 新华互联网科技2019 温州喔噻互联网科技有限公司 福州新华互联网科技学校 知乎 广州恒生互联网科技有限 昊天互联网科技有限公司 搜狐科技互联网 深圳艾果互联网通讯科技 互联网科技创新的路径 威龙国际互联网科技公司 中天科技中国工业互联网 互联网科技快讯热点 米泉互联网科技专业怎么样 数字科技和互联网金融哪个好 青岛互联网科技园 鸠鸠互联网科技 融贸通互联网科技 互联网科技素材视频竖屏 成都仁贤领冠互联网科技有限公司 成都互联网科技公司100强 字节跳动和互联网科技 阿大互联网科技有限公司 广州新华互联网科技学校电竞方面 本届互联网大会上的黑科技 互联网科技新闻
0