重新启动容器时,Docker Webapp卡住

时间:2018-06-24 19:53:50

标签: docker archlinux

我已经在Arch Linux上安装了docker。尝试运行Web应用程序的docker映像,但是我只能第一次运行它们。如果我停止了容器并再次运行它,浏览器将继续加载。我必须重新启动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.

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,并且在/etc/docker/daemon.json中完成了dns配置。也无法在Docker日志中看到任何错误。

我缺少任何配置吗?

1 个答案:

答案 0 :(得分:0)

我试图运行上面的图像看起来一切正常,但我会提到两件事。

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

以上命令将使用容器port 8080映射任何可用的动态端口。并且执行curl localhost:8080不会给出必要的响应,因为您不知道哪个端口是地图。

查看动态端口。 enter image description here  所以在这种情况下,您假设要卷曲32769

安装curl后将其放入内部容器

enter image description here

您的docker映像不包含卷曲,我对此进行了验证。

稍后,我分配了静态端口,以便它可以使用curl在主机上正常工作。

enter image description here

然后我停止容器并重新启动,但是一切都很好。

问题肯定是来自端口。 enter image description here

您始终可以使用命令8080 (替换为{},找到裸露的容器端口(在这种情况下为docker port war映射到的主机端口。 {1}}(带有容器的名称)

命令的输出类似于:war。因此,应该在主机中使用端口8080/tcp -> 0.0.0.0:32769来访问端口32769上的容器。