现在,我的一些服务器应用程序被打包到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地址?
从docker-compose的版本1.15(可能是1.14)开始,现在可以在IPv6的端口定义中使用额外的冒号:
version: '3.3' services: app: image: nginx ports: - "::1:8080:80"
相关问题可以在这里find: https : //github.com/docker/compose/issues/2663
我的解决scheme是将所有容器公开的端口绑定到127.0.0.1,然后通过HAProxy将外部v4和v6 IP连接转发到127.0.0.1。 也许不是最好的方式来做,但对我来说是一个解决scheme。