无法在Docker上运行Web应用程序

我有一个简单的Python程序,执行以下操作

identitydock.py

from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello Docker!\n' if __name__ == '__main__': app.run(debug=True, host='0.0.0.0') 

我的Dockerfile如下

Dockerfile

 FROM python:3.4 RUN groupadd -r uwsgi && useradd -r -g uwsgi uwsgi RUN pip install Flask==0.10.1 uWSGI==2.0.8 WORKDIR /app COPY app /app COPY cmd.sh / EXPOSE 9090 9191 USER uwsgi CMD ["/cmd.sh"] 

我的cmd.sh如下所示:

 #!/bin/bash set -e if [ "$ENV" = 'DEV' ]; then echo "Running Development Server" exec python "identidock.py" else echo "Running Production Server" exec uwsgi --http 0.0.0.0:9090 --wsgi-file /app/identidock.py \ --callable app --stats 0.0.0.0:9191 fi 

由于某种原因,应该返回“hello docker”的简单网页在我使用docker运行时不起作用。

我给运行该应用程序的命令:

dockerbuild设-t identidock。

docker运行-d -p 5000:5000 identidock

当我curl本地主机:5000我收到以下消息

curl:(7)无法连接到本地端口5000:连接被拒绝

我可以知道,如果我的dockerconfiguration有问题吗?

我在MacOSX上使用以下docker版本

Docker版本17.03.1-ce,构buildc6d412e

参考源https://github.com/using-docker/using_docker_in_dev

编辑-1

在docker ps -a上,容器状态显示“UP”

在docker日志CONTAINER_ID,我得到以下日志

 Running Production Server *** Starting uWSGI 2.0.8 (64bit) on [Thu Jul 6 02:04:04 2017] *** compiled with version: 4.9.2 on 06 July 2017 02:03:16 os: Linux-4.4.74-boot2docker #1 SMP Mon Jun 26 18:01:14 UTC 2017 nodename: 323e6ff35d0d machine: x86_64 clock source: unix pcre jit disabled detected number of CPU cores: 1 current working directory: /app detected binary path: /usr/local/bin/uwsgi your processes number limit is 1048576 your memory page size is 4096 bytes detected max file descriptor number: 1048576 lock engine: pthread robust mutexes thunder lock: disabled (you can enable it with --thunder-lock) uWSGI http bound on 0.0.0.0:9090 fd 4 uwsgi socket 0 bound to TCP address 127.0.0.1:45710 (port auto-assigned) fd 3 Python version: 3.4.6 (default, Jun 21 2017, 18:32:49) [GCC 4.9.2] *** Python threads support is disabled. You can enable it with --enable-threads *** Python main interpreter initialized at 0x1bd9640 your server socket listen backlog is limited to 100 connections your mercy for graceful operations on workers is 60 seconds mapped 145536 bytes (142 KB) for 1 cores *** Operational MODE: single process *** WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x1bd9640 pid: 1 (default app) *** uWSGI is running in multiple interpreter mode *** spawned uWSGI master process (pid: 1) spawned uWSGI worker 1 (pid: 6, cores: 1) *** Stats server enabled on 0.0.0.0:9191 fd: 13 *** spawned uWSGI http 1 (pid: 7) 

您将主机上的端口5000连接到容器上的端口5000。 但是你没有在5000端口上运行任何东西,你有东西在9090和9091上运行。所以试试docker run -d -p 5000:9090 identidockdocker run -d -p 5000:9090 identidock docker run -d -p 5000:9091 identidock