Я пытаюсь пройти через порты в докер-контейнеры, где несколько контейнеров имеют один и тот же порт и должны быть доступны через один и тот же порт. Звучит странно, но это хорошо, но давайте пойдем с этим так:
/etc/docker/daemon.json
{
"ipv6": true,
"fixed-cidr-v6": "2a01:a:b:c:FFFF::/80"
}
Создать сеть для более легкого обращения.
docker network create --ipv6 --subnet 2a01:a:b:c:AAAA::/80 --gateway 2a01:a:b:c:AAAA::1 --subnet 172.18.16.0/24 test
Теперь у меня есть test
сеть с именем и могузапустите контейнеры на нем:
/usr/bin/docker run -it --rm --net test --ip6 2a01:a:b:c:AAAA:1::2 -p 80:80 --name nginx nginx:latest
Теперь у нас есть netstat:
netstat -tulpen
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
tcp 0 0 127.0.0.1:40945 0.0.0.0:* LISTEN 0 31926551 17395/containerd
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 101 31917578 32693/systemd-resol
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 0 15061 816/sshd
tcp6 0 0 :::80 :::* LISTEN 0 31979291 23983/docker-proxy
tcp6 0 0 :::22 :::* LISTEN 0 15063 816/sshd
udp 0 0 127.0.0.53:53 0.0.0.0:* 101 31917577 32693/systemd-resol
Проблема в том, что он привязывается к :::: 80 вместо IP контейнера. Я могу получить доступ к nginx извне, как это через ping6, curl на настроенном ip, а также через шлюз :: 1 из test
(который я не понимаю почему), а также по адресу Ipv4 и адресу IPv6 eth0
Я хочу, чтобы он отвечал на ping, а также на свой IP, но не на другие. Мне нужен другой nginx, который также слушает на 80
. Я часто читаю, что все порты в EXPOSE
доступны по умолчанию, даже если они не привязаны к хосту, когда IPv6 включен в контейнере. Это, кажется, не имеет место здесь. Привязка с -p [ipv6]:80:80
приведет к ошибкам.