У меня проблема, когда я пытаюсь перенаправить веб-трафик на экземпляр phpfpm. Периодически, когда я перезапускаю свои экземпляры aws ec2, я получаю 502 ошибки «плохой шлюз», потому что контейнер phpfpm не отвечает из контейнера веб-службы.

Я могу без проблем перейти в контейнер php, и вроде все в порядке, но почему-то я не могу сделать telnet phpcontainer 9000 - он говорит, что соединение не может быть установлено. похоже, разрешает ip имени службы для шлюза службы в порядке. У сервиса php есть только 1 реплика, но у веб-сервиса есть 2 реплики (глобальная репликация).

Затем я начал проверять все ip-адреса сервисов и контейнеров.

Заметил, что у 2 сервисов одинаковый cidr (тот самый сервис с проблемой):

docker service inspect webservice | grep Addr
                    "Addr": "10.255.0.4/16"
                    "Addr": "172.20.0.2/16"
docker service inspect phpservice23 | grep Addr
                    "Addr": "172.20.0.2/16"

Это нормально?

Однако все IP-адреса уникальны (обратите внимание, что выше я говорю о служебных идентификаторах ).

Я просто не могу понять, что заставляет этот 1 конкретный контейнер быть доступным из другой службы.

Если я перезапущу проблемный контейнер, после этого он заработает.

Любые идеи?

0
Nick Lang 2 Дек 2017 в 03:27

1 ответ

Лучший ответ

На самом деле я узнал, что проблема здесь в том, что мы создавали сервисы через api с плохой спецификацией. Может быть другая ошибка, но если вы создадите службу и не укажете свойство EndpointSpec.Mode, то мы получим службы, которые получат дублирующиеся IP-адреса при перезапуске демона докеров.

1
Nick Lang 24 Дек 2017 в 14:23