【问题标题】:Docker container startup hangs while trying to run voting app尝试运行投票应用程序时 Docker 容器启动挂起
【发布时间】:2023-06-17 19:27:01
【问题描述】:

我做了以下事情:

https://github.com/dockersamples/example-voting-app

cd example-voting-app

里面有很多文件/文件夹

MAINTAINERS
LICENSE
Jenkinsfile
ExampleVotingApp.sln
README.md
docker-stack-windows-1809.yml
docker-stack-simple.yml
docker-compose.yml
docker-compose-windows.yml
docker-compose-windows-1809.yml
docker-compose-simple.yml
docker-compose-k8s.yml
docker-compose-javaworker.yml
architecture.png
kube-deployment.yml
k8s-specifications
docker-stack.yml
docker-stack-windows.yml
result
vote
worker

我做了cd vote 并执行了以下命令

docker build . -t voting-app
docker run -p 5000:80 voting-app

运行docker run 命令后,我看到以下输出,但没有任何反应。我一无所知,因为没有错误消息等。

[root@osboxes vote]# docker run -p 5000:80 voting-app
[2020-06-16 17:59:27 +0000] [1] [INFO] Starting gunicorn 19.10.0
[2020-06-16 17:59:27 +0000] [1] [INFO] Listening at: http://0.0.0.0:80 (1)
[2020-06-16 17:59:27 +0000] [1] [INFO] Using worker: sync
[2020-06-16 17:59:27 +0000] [9] [INFO] Booting worker with pid: 9
[2020-06-16 17:59:27 +0000] [10] [INFO] Booting worker with pid: 10
[2020-06-16 17:59:27 +0000] [11] [INFO] Booting worker with pid: 11
[2020-06-16 17:59:27 +0000] [12] [INFO] Booting worker with pid: 12

请指导如何解决此问题,以及如何让投票应用在容器上运行。

我的操作系统详情如下:

NAME="CentOS Linux"
VERSION="7 (Core)"

谢谢

【问题讨论】:

  • 很多人都在为此苦苦挣扎,我认为它不再起作用了。希望我们能在这里找到解决方案:)
  • 这是一个分布式应用程序,您需要运行不同的容器。你是用 docker-compose 开始的吗?
  • 你访问过localhost:5000吗?如果它运行时没有错误,这很可能意味着它只是按应有的方式运行。
  • 我刚刚启动了投票应用程序。那就是我面临问题的地方。我还没有启动其他应用程序。我的应用程序无法启动。所以查看 URL 没有意义(我访问了192.168.56.101:5000,但页面没有加载。192.168.56.101 是我的虚拟机的 IP)
  • @SiHa 我猜你是对的。我尝试在 15 分钟后访问 192.168.56.101:5000,我现在可以访问该页面。奇怪的是它没有更早地工作。现在,如果我使用 Ctrl + C 终止进程,然后再次重新运行,我可以立即访问 url 192.168.56.101:5000。之前我做不到。

标签: linux docker docker-compose


【解决方案1】:

在我之前的回答中,我通过单独构建和运行每个图像来使应用程序正常工作。

最后,花了几个小时后,我终于能够创建docker-compose.yml 文件并能够使用以下命令运行整个应用程序:

docker-compose up

希望它可以帮助其他正在努力使此应用程序正常工作的人。

docker-compose.yml

version: "3"

services:
 redis:
  image: redis

 db:
  image: postgres:9.4
  environment:
    - POSTGRES_PASSWORD=postgres
    - POSTGRES_HOST_AUTH_METHOD=trust

 vote:
  image: voting-app
  ports:
   - 5000:80
  links:
   - redis

 worker:
  image: worker-app
  links:
    - db
    - redis

 result:
  image: result-app
  ports:
    - 5001:80
  links:
    - db

【讨论】:

  • Chaurasta 非常感谢你,我花了几个小时试图在不使用 docker compose 的情况下手动运行应用程序。但是使用 docker compose 很快
【解决方案2】:

代码签出后,我按照以下步骤运行投票应用程序。

更改投票目录

docker run -d --name=redis redis

docker build . -t voting-app

docker run -p 5000:80 --link redis:redis voting-app

docker run -d --name=db -e POSTGRES_PASSWORD=postgres postgres:9.4

切换到工作目录

docker build . -t worker-app

docker run --link redis:redis --link db:db worker-app

切换到结果目录

docker build . -t result-app

docker run -p 5001:80 --link db:db result-app

访问网址

http://<IP>:5000/

http://<IP>:5001/

将 IP 替换为您机器的 IP。现在我可以访问这两个 URL。

【讨论】:

    最近更新 更多