第八节 Docker 容器网络连接与通信实战

一、容器端口映射机制

(一)端口映射核心参数

Docker 提供两种端口映射方式,通过 -p 和 -P 参数实现容器与宿主机的端口互联:

参数

映射方式

示例

应用场景

-P

随机映射容器端口到宿主机

docker run -d -P nginx

快速部署测试环境

-p

自定义映射宿主机端口到容器

docker run -d -p 8080:80 nginx

生产环境固定端口访问

(二)高级端口映射技巧

1. 绑定指定IP地址

# 仅允许本地环回地址访问容器端口
docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py

# 端口映射结果
docker ps
# 输出:127.0.0.1:5001->5000/tcp

2. UDP端口映射

# 映射UDP端口(需明确指定协议)
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

# 验证UDP映射
netstat -an | grep 5000

3. 快捷查看端口映射

# 通过容器名查看端口映射
docker port adoring_stonebraker 5000
# 输出:127.0.0.1:5001


二、容器互联与网络配置

(一)自定义网络创建

# 创建bridge类型网络
docker network create -d bridge test-net

# 查看网络列表
docker network ls
# 输出示例:
# NETWORK ID     NAME      DRIVER    SCOPE
# ab283fcd3b16     test-net  bridge    local

(二)容器连接到自定义网络

1. 启动容器并加入网络

# 启动第一个容器
docker run -itd --name test1 --network test-net ubuntu /bin/bash

# 启动第二个容器
docker run -itd --name test2 --network test-net ubuntu /bin/bash

2. 验证容器互联

# 进入test1容器
docker exec -it test1 /bin/bash

# 安装ping工具
apt-get update && apt-get install -y iputils-ping

# ping测试2容器(可直接使用容器名)
ping test2
# 输出:
# PING test2 (172.21.0.3) 56(84) bytes of data.
# 64 bytes from test2.test-net (172.21.0.3): icmp_seq=1 ttl=64 time=0.123 ms


三、DNS配置与网络优化

(一)全局DNS配置

1. 修改Docker守护进程配置

# /etc/docker/daemon.json
{
  "dns": ["114.114.114.114", "8.8.8.8"],
  "dns-search": ["local.com"]
}

2. 重启Docker服务

sudo systemctl restart docker

3. 验证DNS配置

# 启动临时容器查看DNS配置
docker run -it --rm ubuntu cat /etc/resolv.conf
# 输出:
# nameserver 114.114.114.114
# nameserver 8.8.8.8
# search local.com

(二)单容器DNS定制

# 启动容器时指定DNS和搜索域
docker run -it --rm \
  -h host_ubuntu \
  --dns=114.114.114.114 \
  --dns-search=test.com \
  ubuntu \
  bash

# 查看容器DNS配置
cat /etc/resolv.conf
# 输出:
# search test.com
# nameserver 114.114.114.114


四、Windows环境网络特殊处理

(一)Windows端口映射问题

1. 问题现象

  • 容器端口映射后,宿主机浏览器无法通过localhost:端口访问

2. 原因分析

  • Windows下Docker容器运行在VirtualBox虚拟机中
  • localhost指向宿主机,而非虚拟机IP

(二)解决方案

1. 获取虚拟机IP

# Docker Toolbox环境
docker-machine ip default
# 输出示例:192.168.99.100

2. 访问容器服务

# 格式:http://虚拟机IP:映射端口
http://192.168.99.100:8888

3. 完整操作流程

# 1. 启动容器并映射端口
docker run -it -p 8888:8888 conda:v1

# 2. 查看容器IP(可选)
docker inspect <容器ID> | grep IPAddress

# 3. 在容器内启动服务
jupyter notebook --no-browser --port=8888 --ip=0.0.0.0 --allow-root


五、容器网络高级实践

(一)多端口映射案例

# 同时映射多个端口
docker run -d \
  -p 80:80 \
  -p 443:443 \
  -p 22:22 \
  nginx

# 查看多端口映射
docker ps
# 输出:
# 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:22->22/tcp

(二)网络别名与服务发现

# 创建网络并设置别名
docker network create -d bridge \
  --alias web-server \
  --alias app-backend \
  app-network

# 启动容器并指定别名
docker run -d \
  --name webapp \
  --network app-network \
  --network-alias frontend \
  training/webapp

相关文章

nginx配置之nginx中的“防盗”配置

一般我们使用nginx常用的就那么几项,简单代理、反向代理、代理转发、负载均衡、重定向,等等。但是有时候又不得不进行另外的一些配置,下面介绍几种"防盗"配置。爬虫 User-Agent...

Nginx中想对IP做访问限制怎么做?access模块来帮忙-09

在一个请求闯过之前的postread阶段,rewrite阶段,find_config阶段,preaccess阶段后终于来到了Access阶段了。Access阶段主要就是控制请求是否可以继续向下访问的。...

确保 Nginx 网络服务器的安全

在数字时代,网络安全已成为一个亟待解决的问题。随着网络攻击的增加,确保网络服务器安全对保护敏感数据和维护网站完整性至关重要。本博文将指导你如何配置 Nginx(一种流行的开源网络服务器软件),以保护服...

一文搞懂!7种常见的限流方式!

在实际应用中,每个系统或者服务都有其处理能力的极限(瓶颈),即便是微服务中有集群和分布式的夹持,也不能保证系统能应对任何大小的流量,因此,系统为了自保,需要对处理能力范围以外的流量进行“特殊照顾”(比...

从开发到上线:Vite 中资源路径解析与工程化解决方案

在现代前端开发中,Vite 已经成为了一个备受欢迎的构建工具。然而,当涉及到静态资源(如字体、图片等)的路径解析时,开发者常常会遇到一些棘手的问题。特别是在不同的开发和生产环境中,路径解析的行为可能...

nginx upstream节点健康检查

1、前提条件编译nginx时增加nginx_upstream_check_module模板git地址:https://github.com/yaoweibin/nginx_upstream_check...