一部のサーバーアプリケーションがDockerコンテナーにパックされたので、それらを本番サーバーにデプロイしようとしています。私のコンテナは、IPv4とIPv6で同時にアクセスできる必要があります。通常、それは問題ではありません。コンテナポートをホストポートにマップする場合。 docker-composeを介して、Dockerは使用可能なIPv6およびIPv4アドレスを使用します。
私の問題は、サーバーで使用できるIPv4アドレスとIPv6アドレスが1つだけでなく、複数あることです。 私のアプリケーションコンテナは、1つの特定のIPv4アドレスと1つの特定の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"
関連する問題はここで見つけることができます: https://github.com/docker/compose/issues/266
私の解決策は、すべてのコンテナ公開ポートを127.0.0.1にバインドしてから、HAProxyを介して外部v4およびv6IP接続を127.0.0.1に転送することです。たぶんそれを行うための最良の方法ではありませんが、私にとっての解決策です。