Проблема подсети Docker на Docker 18 - PullRequest
0 голосов
/ 26 сентября 2018

Я столкнулся с проблемой при использовании докера.Используемая версия: Docker версия 18.06.1-ce, сборка e68fc7a на Ubuntu 16.04 LTS.

Я использую подсеть, которая предоставляет docker для связи между контейнером, используя имя контейнера docker в той же подсети.В настоящее время я видел неординарное поведение в отношении связи между контейнером.

Вот проблемный сценарий, запускаемый автоматом:

Я создаю сеть, используя команду:

docker network create --driver=bridge --subnet=172.20.0.0/16 --gateway=172.20.0.1  mynetwork

, чтобы создать мостовую сеть.затем я создаю несколько контейнеров httpd, mysql, tomcat (официальные изображения) с параметром

--network=mynetwork

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

После создания я вижу, что всеСодержимое присутствует в моей подсетевой подсети с помощью команды

docker network inspect mynetwork

Тогда, потому что нам нужно остановить / запустить и перезапустить определенный контейнер после изменения конфигурации на tomcat или http и развертывания war.с помощью команды docker start / stop или docker restart например:

docker restart httpd

Проблема в том, что иногда ни один контейнер в подсети не может обмениваться данными, и даже команда ping не отвечает, хотя имя правильно разрешенои ip в порядке.

Единственный способ решить эту проблему - перезапустить службу Docker, используя

systemctl restart docker

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

Можете ли вы дать мне подсказку об этом типе поведения и подсети Docker?

Вчера я добавил, что докер проверяет мою сеть, чтобы видеть после каждой остановки / запуска или перезапуска, чтобы видеть, был ли контейнер правильно добавлен в сеть

Здесь больше деталей о сделанных операциях, которыеподразумевает такое поведение.Я установил трассировку своего развертывания и всех операций, которые приводят к этой ситуации:

1 создайте контейнер агента, который позволяет вызывать все контейнеры в сети

docker run -d --name agent myagent

2 создание сети

docker network create -o com.docker.network.bridge.name=mynetwork --drive=bridge --subnet=172.20.0.0/16 --gateway=172.20.0.1 mynetwork

3 подключите мой агент

docker network connect my network agent

4 pull mysql

docker pull mysql

5 create mysql

docker create --name mysql --restart always --ip 172.20.0.50 --network= mynetwork -v /root/test/mysql/lib/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=muiligA mysql

6 start mysql

docker start mysql

7 pull httpd

 docker pull httpd

8 create http

docker create --name httpd --restart always -p 80:80 -p 443:443 -v /root/test/httpd/conf/vhosts:/usr/local/apache2/conf/vhosts -v /root/test/httpd/htdocs:/usr/local/apache2/htdocs -v /root/test/letsencrypt:/etc/letsencrypt httpd

9 start httpd

docker start httpd

10 подключение http к сети

docker network connect mynetwork httpd

11 pull tomcat

docker pull tomcat 

12 create tomcat

docker create --name tomcat --restart always --network=mynetwork --ip 172.20.0.10 -v /root/test/tomcat/webapps:/usr/local/tomcat/webapps -v /root/test/tomcat/conf:/usr/local/tomcat/conf/applicaton -v /root/test/logs:/usr/local/logs tomcat

13 start tomcat

docker start tomcat

это когда мы проверяем из контейнера httpdнапример, соединение с tomcat, которое кажется, что пинг не отвечает.

По своему журналу я понял, что несколько раз ошибочно запускаю докер, подключив агент mynetwork, несколько раз, даже если агент уже подключен к сети.В этом случае я получил сообщение, что агент уже подключен к сети.Может ли это действие подразумевать такое поведение?

Я добавлю проверку после каждого перезапуска и запуска контейнера, чтобы убедиться, что контейнер находится в подсетевой подсистеме док-станции, и дам вам трассировку и ответ для каждой команды, если я воспроизведу ошибку, поскольку она ошибочна.

...