Docker 网络功能介绍

本文介绍了Docker中容器的网络配置方式,包括如何通过端口映射让外部访问容器内的应用,以及如何通过自定义网络实现容器间的互联。同时,还提供了Docker Compose在多容器互联场景下的应用指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

Docker 在 1.13 版本引进了新的管理命令(management commands)

Docker 1.13+ 推 荐使用 docker network 子命令来管理 Docker 网络。

外部访问容器

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

当使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。

  • -P 随机映射端口(49000~49900)
  • -p 指定映射端口
$ docker run -d -P training/webapp python app.py

$ docker ps -l

同样的,可以通过 docker logs 命令来查看应用的信息。

$ docker logs -f nostalgic_morse

-p 则可以指定要映射的端口,并且,在一个指定端口上只可以绑定一个容器。支持的格式有

  • ip:hostPort:containerPort
  • ip::containerPort
  • hostPort:containerPort

使用 hostPort:containerPort 格式本地的 5000 端口映射到容器的 5000 端口:

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

此时默认会绑定本地所有接口上的所有地址。

映射到指定地址的指定端口

可以使用 ip:hostPort:containerPort 格式指定映射使用一个特定地址,比如 localhost 地址 127.0.0.1

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

还可以使用 udp 标记来指定 udp 端口

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

查看映射端口配置

使用 docker port 来查看当前映射的端口配置,也可以查看到绑定的地址

$ docker port nostalgic_morse 5000

注意:

  • 容器有自己的内部网络和 ip 地址(使用 docker inspect 可以获取所有的变量,Docker还可以有一个可变的网络配置。)
  • -p 标记可以多次使用来绑定多个端口
$ docker run -d \
-p 5000:5000 \
-p 3000:80 \
training/webapp \
python app.py

容器互联

如果你之前有 使用经验,你可能已经习惯了使用 参数来使容器互联。 随着 Docker 网络的完善,强烈建议大家将容器加入自定义的 Docker 网络来连接多个容器。 容器的连接(linking)系统是除了端口映射外,另一种跟容器中应用交互的方式。 该系统会在源和接收容器之间创建一个隧道,接收容器可以看到源容器指定的信息。

新建网络

下面先创建一个新的 Docker 网络。

$ docker network create -d bridge my-net

连接容器

创建一个容器并连接到新建的 my-net 网络

$ docker run -it --rm --name busybox1 --net my-net busybox sh

打开新的终端,再新建一个容器,加入 my-net 网络

$ docker run -it --rm --name busybox2 --net my-net busybox sh

查看容器

$ docker ps

下面通过 ping 来证明 busybox1 容器和 busybox2 容器建立了互联关系。

在 busybox1容器输入以下命令。

/ # ping busybox2
PING busybox2 (172.19.0.3): 56 data bytes
64 bytes from 172.19.0.3: seq=0 ttl=64 time=0.072 ms

用 ping 来测试连接 busybox2 容器,它会解析成 172.19.0.3。

同理在 busybox2 容器执行 ping busybox1 ,也会成功连接到。

/ # ping busybox1

PING busybox1 (172.19.0.2): 56 data bytes

64 bytes from 172.19.0.2: seq=0 ttl=64 time=0.064 ms

这样,busybox1 容器和 busybox2 容器建立了互联关系。

Docker Compose

如果你有多个容器之间需要互相连接,推荐使用 Docker Compose。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值