Docker内网穿透全解析

一、什么是Docker内网穿透

Docker是一个优秀的容器化技术,可以将应用程序和服务打包成轻量级的容器进行管理和部署。但是,Docker容器默认只能在内网环境中进行通信,如果需要让外网用户访问容器中的应用程序和服务,则需要进行端口映射和内网穿透。Docker内网穿透即是通过某种方式,实现外网用户访问Docker容器内部应用程序和服务的技术。

经过多年的发展,目前市面上有很多Docker内网穿透的解决方案,包括Nginx、Traefik、Caddy、Frps等等。下面我们将分别介绍几种常见的Docker内网穿透方案。

二、Nginx实现Docker内网穿透

Nginx是一款常见的Web服务器和反向代理服务器,除此之外还可以实现Docker内网穿透。具体实现过程如下:

1.安装并配置Nginx

docker pull nginx

docker run -d --name nginx -p 80:80 -v /path/to/nginx.conf:/etc/nginx/nginx.conf nginx

其中,/path/to/nginx.conf是你本地Nginx配置文件的路径。

2.配置Nginx反向代理

location / {
    proxy_pass http://容器IP:容器端口;
}

其中,容器IP和容器端口分别替换为你需要映射的Docker容器IP和端口。

三、Traefik实现Docker内网穿透

Traefik是一款轻量级的反向代理和负载均衡工具,同时也支持Docker内网穿透。具体实现过程如下:

1.安装并配置Traefik

docker pull traefik

docker run -d -p 80:80 -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock traefik

# 配置ACME协议配置(HTTPS)
traefik:
  image: "traefik:v2.2"
  command:
    - --providers.docker=true
    - --providers.docker.exposedbydefault=false
    - --entrypoints.web.address=:80
    - --entrypoints.websecure.address=:443
    - --certificatesresolvers.myresolver.acme.tlschallenge=true
    - --certificatesresolvers.myresolver.acme.email=youremail@gmail.com
    - --certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json
    - --certificatesresolvers.myresolver.acme.dnschallenge.provider=cloudflare
    - --certificatesresolvers.myresolver.acme.dnschallenge.delaybeforecheck=15
    - --log.level=INFO
  ports:
    - "80:80"
    - "443:443"
    - "8080:8080"
  volumes:
    - /root/traefik/letsencrypt:/letsencrypt
    - /var/run/docker.sock:/var/run/docker.sock
  restart: always 

其中,需将youremail@gmail.com替换为你的有效邮箱地址,cloudflare可以替换为其他DNS提供商。

2.配置Traefik反向代理

labels:
  - "traefik.enable=true"
  - "traefik.http.routers.my-service.rule=Host(`your.domain.com`) && Path(`/my-service`)"
  - "traefik.http.routers.my-service.entrypoints=websecure"
  - "traefik.http.routers.my-service.tls=true"
  - "traefik.http.routers.my-service.tls.certresolver=myresolver"
  - "traefik.http.routers.my-service.service=my-service"
  - "traefik.http.services.my-service.loadbalancer.server.port=80"

其中,your.domain.com和/my-service均需替换成你需要映射的域名和路径,my-service需要修改为你的Docker容器名称。

四、Caddy实现Docker内网穿透

Caddy是一个新兴的Web服务器,具有简洁易用、快速部署的特点,同时也支持Docker内网穿透。具体实现过程如下:

1.安装并配置Caddy

docker pull caddy

docker run -d --name caddy -p 80:80 -p 443:443 -v /path/to/Caddyfile:/etc/caddy/Caddyfile caddy

其中,/path/to/Caddyfile是你本地Caddy配置文件的路径。

2.配置Caddy反向代理

your.domain.com {
  reverse_proxy / http://容器IP:容器端口
}

其中,容器IP和容器端口分别替换为你需要映射的Docker容器IP和端口。

五、Frps实现Docker内网穿透

Frps是Fast Reverse Proxy Server的缩写,是一款高性能、轻量级的内网穿透服务器。具体实现过程如下:

1.安装并配置Frps服务器

docker pull centos

docker run -d --name frps --network host --restart always -v /path/to/frps.ini:/frps/frps.ini centos /frps/frps -c /frps/frps.ini

其中,/path/to/frps.ini是你本地Frps配置文件的路径。

2.配置Frpc客户端

[common]
server_addr = frps服务器IP
server_port = 7000

[web]
type = http
local_ip = 容器IP
local_port = 容器端口
custom_domains = your.domain.com

其中,frps服务器IP、容器IP、容器端口、your.domain.com均需要修改为你实际使用的IP地址和域名。

六、总结

以上是Docker内网穿透的几种主流方案,分别以Nginx、Traefik、Caddy和Frps为代表。对于选择哪种方案,可以根据自己的具体情况来选择,满足需求且稳定安全即可。Docker内网穿透是实现Docker容器对外提供服务的必要手段,希望通过本文的介绍,能够帮助到读者,同时也欢迎读者在评论区分享自己的经验和技巧。

原创文章,作者:XOCXE,如若转载,请注明出处:https://www.506064.com/n/372951.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
XOCXE的头像XOCXE
上一篇 2025-04-25 15:26
下一篇 2025-04-25 15:26

相关推荐

  • docker-ce-18.03.1.ce-1.el7.centos.x86_64需要pigz这个依赖的解决方案

    当我们在linux centos系统中安装docker-ce-18.03.1.ce-1.el7.centos.x86_64时,有时可能会遇到“nothing provides pi…

    编程 2025-04-29
  • 如何解决Docker+k8s报错413 Request Entity Too Large

    对于使用Docker容器和Kubernetes集群的开发人员,在处理HTTP请求时,常常会遇到413 Request Entity Too Large的报错。这通常是由于请求的大小…

    编程 2025-04-27
  • docker-compose编写用法介绍

    本文将详细介绍docker-compose编写的各个方面,包括语法、常见命令等等,旨在帮助读者更好的了解如何使用docker-compose。 一、docker-compose的语…

    编程 2025-04-27
  • Docker 垃圾电脑的解决方案

    Docker 是一种轻量级的容器化技术,可以在一个操作系统中,同时运行多个独立的应用。在使用 Docker 的过程中,可能会出现 Docker 占用大量硬盘空间,导致电脑变得极其缓…

    编程 2025-04-27
  • Docker挂载目录–graph用法介绍

    本文将从如下几个方面详细阐述Docker挂载目录–graph: 一、基本概念 在Docker中,镜像是由一系列只读层组成的文件系统。当我们启动一个容器时,Docker会…

    编程 2025-04-27
  • Docker批量删除容器详解

    一、前言 Docker是一个开源的应用容器引擎,提供了一种轻量级容器化技术,方便快捷的进行应用打包、发布、运行。作为广泛应用的技术之一,Docker是开发、测试、运维的得力助手。但…

    编程 2025-04-25
  • Docker镜像管理

    一、查看所有镜像 使用docker命令可以很轻松地查看所有已经构建好的镜像,命令如下: docker images 该命令将列出所有本地docker主机上所有的镜像: REPOSI…

    编程 2025-04-25
  • Docker-Compose教程详解

    一、概述 Docker-Compose是Docker官方提供的一款使得在一个单机上运行多个容器应用程序变得简单的工具。它使用YAML文件来配置应用程序的服务,此外还可以轻松地启动、…

    编程 2025-04-25
  • Docker MySQL 5.7详解

    一、Docker简介 Docker是一种轻量级容器技术,可以轻松构建,发布和运行应用程序和服务。Docker容器类似于虚拟机,但不需要运行虚拟机本身,而是直接在主机上运行。这使得D…

    编程 2025-04-25
  • Docker-m 全面介绍

    一、Docker-m 是什么? Docker-m 是一款 Docker 容器化管理工具,它可以让用户更方便地管理 Docker 镜像,容器实例、网络、数据卷等各个方面。 二、Doc…

    编程 2025-04-25

发表回复

登录后才能评论