我已经在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日志中看到任何错误。
我缺少任何配置吗?
答案 0 :(得分:0)
我试图运行上面的图像看起来一切正常,但我会提到两件事。
docker run --rm --name war -p 8080 -d mvpjava/springboot_docker_tomcat:1.0
以上命令将使用容器port 8080
映射任何可用的动态端口。并且执行curl localhost:8080
不会给出必要的响应,因为您不知道哪个端口是地图。
安装curl后将其放入内部容器
您的docker映像不包含卷曲,我对此进行了验证。
稍后,我分配了静态端口,以便它可以使用curl在主机上正常工作。
然后我停止容器并重新启动,但是一切都很好。
您始终可以使用命令8080
(替换为{},找到裸露的容器端口(在这种情况下为docker port war
)映射到的主机端口。 {1}}(带有容器的名称)。
命令的输出类似于:war
。因此,应该在主机中使用端口8080/tcp -> 0.0.0.0:32769
来访问端口32769
上的容器。