Проблема подсети Docker на Docker 18

Я столкнулся с проблемой во время моего использования докера. Используемая версия: 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 или команды перезапуска docker:

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 тяги MySQL

docker pull mysql

5 создать 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 начало mysql

docker start mysql

7 тянуть httpd

 docker pull httpd

8 создать 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 начало httpd

docker start httpd

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

docker network connect mynetwork httpd

11 потяните кота

docker pull tomcat 

12 создать кот

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 начало кот

docker start tomcat

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

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

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

0 ответов

Другие вопросы по тегам