Веб-приложение Docker зависает при перезапуске контейнера - PullRequest
0 голосов
/ 24 июня 2018

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

docker run --rm --name war -p 8080 -d mvpjava/springboot_docker_tomcat:1.0
curl http://172.17.0.2:8080 ## gives the response.

docker container stop war

docker run --rm --name war -p 8080 -d mvpjava/springboot_docker_tomcat:1.0
curl http://172.17.0.2:8080 ## stuck :(

docker container stop war
sudo systemctl restart docker

docker run --rm --name war -p 8080 -d mvpjava/springboot_docker_tomcat:1.0
curl http://172.17.0.2:8080 ## gives the response again.

Я уже установил IPForward=kernel в /usr/lib/systemd/network/<interface>.network, а настройки DNS выполнены в /etc/docker/daemon.json. Также не может видеть никаких ошибок в журналах докера.

Мне не хватает какой-либо конфигурации?

1 Ответ

0 голосов
/ 25 июня 2018

Я попытался запустить приведенное выше изображение, все выглядит нормально, но я упомяну две вещи.

docker run --rm --name war -p 8080 -d mvpjava/springboot_docker_tomcat:1.0

Приведенная выше команда отобразит любой свободный динамический порт с контейнером port 8080.и выполнение curl localhost:8080 не даст ответа, необходимого, потому что какой порт является картой, которую вы не знаете.

см. динамический порт.enter image description here, поэтому в этом случае предполагается установить скручивание 32769

внутри контейнера после установки скручивания

enter image description here

Ваш образ докера не содержит curl. Я проверил его.

Позже я назначил статический порт, чтобы он работал с хоста, используя curl.

enter image description here

Затем я останавливаю контейнер и перезагружаюсь, но все равно все в порядке.

Проблема с портом, я уверен.enter image description here

Вы всегда можете найти порт хоста, для которого был открыт порт контейнера (в данном случае 8080) , с помощью команды docker port war (заменить war именем контейнера) .

Вывод команды выглядит примерно так: 8080/tcp -> 0.0.0.0:32769.Следовательно, порт 32769 должен использоваться в хосте для доступа к контейнеру через порт 8080.

...