Docker原生支持UDP端口映射,只需在-p参数中正确使用“宿主机端口:容器端口/udp”格式,如docker run -d -p 53:53/udp dns-server;需确保容器内服务监听0.0.0.0、宿主机防火墙放行UDP端口,且未启用--network=host模式。
直接用 -p 参数加 /udp 后缀就能暴露 udp 端口,不需要额外插件或复杂配置。关键在于写法准确、服务监听正确、防火墙放行到位。
基础命令:单端口 UDP 映射
Docker 原生支持 UDP 映射,语法和 TCP 一致,只需在端口后明确标注 /udp:
-
docker run -d -p 53:53/udp dns-server→ 将宿主机 53/UDP 映射到容器 53/UDP -
docker run -d -p 127.0.0.1:8080:12345/udp my-udp-app→ 仅绑定本地回环,不对外网开放 -
docker run -d -p 192.168.1.100:514:514/udp syslog-collector→ 绑定到指定网卡 IP
注意:/udp 必须写在 宿主机端口之后、容器端口之前,顺序错误(如 53/udp:53)会报错或被忽略为 TCP。
docker-compose 中配置 UDP 端口
在 docker-compose.yml 的 ports 字段中,同样用 /udp 显式声明协议:
使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。用户说“下载镜像”“拉取镜像”“pull xxx”“帮我下载 nginx 镜像”等时触发。支持 SOCKS5 代理直连(推荐)和国内镜像站加速两种模式。
services:
ntp-server:
image: ntp-server:latest
ports:
- "123:123/udp"
metrics-gateway:
image: prometheus-pushgateway
ports:
- "9091:9091/udp"启动后,Docker Compose 会自动调用 iptables 添加对应规则。执行 docker-compose up -d 即可生效。
必须确认的三项前提
即使命令写对,UDP 服务仍可能“不可达”,需逐项验证:
-
容器内服务监听 0.0.0.0(非 127.0.0.1):UDP socket 必须绑定
0.0.0.0:端口,否则只响应本机请求 -
宿主机防火墙放行 UDP 端口:例如 Ubuntu 的 ufw 要执行
sudo ufw allow 53/udp -
容器未禁用网络命名空间或使用 host 网络模式:若用了
--network=host,端口映射失效,服务需自行监听宿主机端口
进阶需求:绑定特定 IP 或多协议共存
同一端口不能同时映射 TCP 和 UDP,但可以分开写:
-
-p 8080:8080/tcp -p 8080:8080/udp→ 宿主机 8080 端口同时支持两种协议 - 若需将 UDP 流量定向到非默认网卡(如仅限内网接口),Docker 原生
-p支持 IP 前缀:-p 10.0.1.5:5000:5000/udp - 遇到 Docker 原生映射不稳定(如高丢包、连接中断),可用
socat替代:在宿主机运行socat UDP4-RECVFROM:5000,ip-add-membership=224.0.0.1:10.0.1.5,fork UDP4:容器IP:5000

















