Docker:将容器端口映射到主机上的单个 IPv6 地址

Docker:将容器端口映射到主机上的单个 IPv6 地址

现在我的一些服务器应用程序已打包到 Docker 容器中,我正尝试将它们部署到生产服务器上。我的容器应该可以通过 IPv4 访问同时使用 IPv6。通常这没有问题:如果您将容器端口映射到主机端口(例如通过 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 地址?

答案1

从 docker-compose 1.15 版本开始,您现在可以在 IPv6 的端口定义中使用额外的冒号:

version: '3.3'

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

相关问题可以在这里找到:https://github.com/docker/compose/issues/2663

答案2

我的解决方案是将所有容器暴露的端口绑定到 127.0.0.1,然后通过 HAProxy 将外部 v4 和 v6 IP 连接转发到 127.0.0.1。这可能不是最好的方法,但对我来说是一个解决方案。

相关内容