容器内部的应用程序无法从外部访问,即如果我执行docker容器并执行
curl localhost:5000
它可以正常工作,但不能在我的计算机上的浏览器上出现错误:无法访问此站点
我的Dockerfile:
# Use an official Python runtime as a parent image FROM python:3.7-slim # Set the working directory to /app WORKDIR /web-engine # Copy the current directory contents into the container at /app COPY . /web-engine # Install Gunicorn3 RUN apt-get update && apt-get install default-libmysqlclient-dev gcc -y # Install any needed packages specified in requirements.txt RUN pip3 install --trusted-host pypi.python.org -r requirements.txt # Make port 5000 available to the world outside this container EXPOSE 5000 # Define environment variable ENV username root # Run app.py when the container launches CMD gunicorn --workers 4 --bind 127.0.0.1:5000 application:app --threads 1
UPON以这种方式执行docker:
sudo docker run -e password=$password -p 5000:5000 $reg/web-engine:ve0.0.2
我得到以下输出:
[2019-09-08 11:53:36 +0000] [6] [INFO] Starting gunicorn 19.9.0 [2019-09-08 11:53:36 +0000] [6] [INFO] Listening at: http://127.0.0.1:5000 (6) [2019-09-08 11:53:36 +0000] [6] [INFO] Using worker: sync [2019-09-08 11:53:36 +0000] [9] [INFO] Booting worker with pid: 9 [2019-09-08 11:53:36 +0000] [10] [INFO] Booting worker with pid: 10 [2019-09-08 11:53:36 +0000] [11] [INFO] Booting worker with pid: 11 [2019-09-08 11:53:36 +0000] [12] [INFO] Booting worker with pid: 12
因此,您可以看到我正在将容器的端口5000映射到计算机的端口5000,但是localhost:5000无法正常工作
因此,我尝试了所有相同的事情,但在Flask的开发服务器上进行了以下更改
从
CMD gunicorn --workers 4 --bind 127.0.0.1:5000 application:app --threads 1
至
CMD python3.7 application.py
和它的工作;我转到localhost:5000并看到应用程序正在运行
该应用程序没有任何问题。我想gunicorn服务器出现错误
requirements.txt文件:
Flask Flask-SQLAlchemy mysqlclient gunicorn bs4 html5lib
请帮帮我
我还尝试了不同形式的gunicorn和docker run命令组合,例如
CMD gunicorn -application:app && sudo docker run -e password=$password -p 5000:8000 $reg/web-engine:ve0.0.2
它没有 与开发服务器一起工作的容器的终端映像
我会很感激一个解决方案,该解决方案不涉及此处提到的内容,例如nginx,supervisor等。SOmeone请helllppp meeeeee ......
127.0.0.1表示容器内部与外部容器不同。使用0.0.0.0:5000代替。
0.0.0.0:5000