Linux

Docker:將容器埠映射到主機上的單個 IPv6 地址

  • April 7, 2021

現在我的一些伺服器應用程序已打包到 Docker 容器中,我正在嘗試將它們部署在我的生產伺服器上。我的容器應該可以同時被 IPv4IPv6 訪問。通常這沒問題:如果您將容器埠映射到主機埠,例如通過 docker-compose,Docker 將使用可用的 IPv6 和 IPv4 地址。

我的問題是:我的伺服器上不僅有一個 IPv4 和 IPv6 地址可用,而且還有多個。**我的應用程序容器應該只使用一個特定的 IPv4 地址和一個特定的主機 IPv6 地址。**您可以使用以下 docker-compose 語法將容器埠綁定到 IPv4 地址:

ports:
   - "127.0.0.1:8001:8001"

(見https://docs.docker.com/compose/compose-file/#ports

不幸的是,我找不到任何有關如何使用 IPv6 地址的資訊。有什麼方法可以將容器埠綁定到 Docker 主機上的單個特定IPv6 地址?

從 docker-compose 1.15 版開始,您現在可以在 IPv6 的埠定義中使用額外的冒號:

version: '3.3'

services:
 app:
   image: nginx
   ports: 
   - "::1:8080:80"

相關問題可以在這裡找到:https ://github.com/docker/compose/issues/2663

我的解決方案是將所有容器暴露埠綁定到 127.0.0.1,然後通過 HAProxy 將外部 v4 和 v6 IP 連接轉發到 127.0.0.1。也許不是最好的方法,但對我來說是一個解決方案。

引用自:https://serverfault.com/questions/842411