首页 > 解决方案 > 重新启动容器时,Docker webapp 卡住了

问题描述

我已经在 Arch Linux 上安装了 docker。尝试运行 Web 应用程序的 docker 映像,但是我只能第一次运行它们。如果我停止容器并再次运行它,浏览器会继续加载。我必须重新启动 docker 服务才能解决这个问题。IE

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>.networkdns 配置/etc/docker/daemon.json。在 docker 日志中也看不到任何错误。

我是否缺少任何配置?

标签: dockerarchlinux

解决方案


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

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

上面的命令会将任何可用的动态端口映射到 container port 8080。并且这样做curl localhost:8080不会给出必要的响应,因为您不知道哪个端口是地图。

查看动态端口。 在此处输入图像描述 所以在这种情况下你应该卷曲 32769

安装 curl 后在容器内

在此处输入图像描述

您的 docker 映像不包含 curl 我已验证。

后来我分配了静态端口,因此它使用 curl 在主机上工作。

在此处输入图像描述

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

我敢肯定,问题出在港口。 在此处输入图像描述

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

命令的输出是这样的:8080/tcp -> 0.0.0.0:32769. 因此,32769应该在主机中使用端口来访问端口上的容器8080


推荐阅读