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/zh-hant/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 MySQL 5.7詳解

    一、Docker簡介 Docker是一種輕量級容器技術,可以輕鬆構建,發布和運行應用程序和服務。Docker容器類似於虛擬機,但不需要運行虛擬機本身,而是直接在主機上運行。這使得D…

    編程 2025-04-25
  • Docker-Compose教程詳解

    一、概述 Docker-Compose是Docker官方提供的一款使得在一個單機上運行多個容器應用程序變得簡單的工具。它使用YAML文件來配置應用程序的服務,此外還可以輕鬆地啟動、…

    編程 2025-04-25
  • Docker-m 全面介紹

    一、Docker-m 是什麼? Docker-m 是一款 Docker 容器化管理工具,它可以讓用戶更方便地管理 Docker 鏡像,容器實例、網絡、數據卷等各個方面。 二、Doc…

    編程 2025-04-25

發表回復

登錄後才能評論