调试Docker立即退出?

时间:2017-09-30 21:33:23

标签: python docker

我正在关注官方的docker教程: https://docs.docker.com/get-started/part2/#build-the-app

我可以成功构建Docker镜像(在创建Dockerfile,app.py和requirements.txt之后)并查看它:

docker build -t friendlyhello .
docker ps -a

但是,它在运行时立即退出

docker run -p 4000:80 friendlyhello

我无法找到找不到原因的方法

1)" docker ps -a" - 说容器退出了 2)docker logs"容器名称"不返回有关日志的信息 3)我可以将shell附加到它上面:

docker run  -p 4000:80 friendlyhello /bin/sh

但是我没有找到(grep)那里的任何日志信息(在/ var / log中) 4)使用-t和-d附加前台和分离模式没有帮助

我还能做什么?

3 个答案:

答案 0 :(得分:2)

注意:不应该在已退出(已停止)的容器上使用docker exec(请参阅moby issue 30361

  停止的容器上的

docker logsdocker inspect应该仍然可以,但是docker exec确实没有。

你应该看到

Error response from daemon: Container a21... is not running

因此,对于您正在运行的图像,泊坞工检查应显示入口点和cmd,如this answer中所示。
正常行为是in this answer所描述的行为。

答案 1 :(得分:0)

我会调试一个容器,它不会通过将入口点切换到/ bin / bash来启动,或者只要我想要保持容器处于活动状态,然后单独运行每个命令/至少起点,以确保我在正确的位置,它具有必要的权限。然后我将能够看到在哪里打破

答案 2 :(得分:0)

我遇到了同样的问题...这让我发疯了。我在运行Windows 7的同时使用Docker Toolbox。我在docker events&之前运行docker run -p 4000:80 friendlyhello。它向我展示的无非是容器启动,然后立即退出。 docker logs <container id>什么也没显示。

当我遇到troubleshooting page并建议删除docker计算机并重新创建它时,我正要放弃。我知道这听起来像是大锤类型的解决方案,但是这些示例似乎表明重新创建下载了最新版本。我按照显示的步骤进行了工作!如果它可以帮助任何人,我执行的步骤都是

docker-machine stop default

docker-machine rm default

docker-machine create --driver virtualbox default

现在重新创建示例文件,构建图像并运行它;

$ docker run -p 4000:80 friendlyhello
 * Serving Flask app "app" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)

在运行Docker Toolbox的情况下,我可以在http://192.168.99.100:4000/上访问它,现在我得到了;

Hello World!
Hostname: ca4507de3f48
Visits: cannot connect to Redis, counter disabled