码头工人容器正在运行.但是页面在本地主机URL中不起作用(页面没有发送任何数据)



我是Docker和Python的新手,我使用Flask创建了一个简单的python应用程序。我想在 Docker 容器中运行它。docker 容器显示它正在运行。但是当我访问网址时,我得到本地主机没有发送任何数据。

docker 容器 ls 显示我的容器在本地主机和端口号 8081 上运行

app.py

from flask import Flask, redirect, url_for, request

app = Flask(__name__)

@app.route("/hello", methods=["GET","POST"])
def hello():
return "Hello World!"
if __name__ == '__main__':
app.run(debug=True, port=8081,host='0.0.0.0')

Dockerfile

FROM python:2.7
ADD app.py /
RUN pip install flask
EXPOSE 8081 
CMD ["flask", "run", "--host=0.0.0.0"]
CMD ["python", "app.py", "--host=0.0.0.0"]

当我在本地环境中运行相同的 app.py 时。我在本地主机网址上获得了所需的数据。有人可以引导我朝着正确的方向前进吗?

图像被标记为dockerimage:latest,我用:

docker run -it -p 8081:8081 dockerimage

检查容器docker container ls显示:

0.0.0.0:8081->8081/tcp

在你的 Dockerfile 和 Flask 脚本中一切似乎都很好,但我会建议两件事。

  • 将基础映像更新为python:3.72.7将达到其生命周期。
  • 删除CMD ["flask", "run", "--host=0.0.0.0"],因为每个 dockerfile 只有一个CMD
FROM python:3.7.4-alpine3.10 
RUN pip install flask
ADD app.py /
EXPOSE 8081 
CMD ["python", "app.py", "--host=0.0.0.0"]

现在运行容器

docker run -it --name my_app --rm -p 8081:8081 dockerimage

打开浏览器并点击

http://localhost:8081/hello

docker exec -it my_app ash -c "apk add --no-cache curl && curl localhost:8081/hello"

以上方法之一应该有效。

如果第二个命令有效,则主机配置有问题。

我发生了一些不同的情况,我在容器内运行应用程序,该应用程序试图访问容器外部的MySQL服务器(在我的本地计算机上运行(,然后我需要在我的docker-compose文件中添加此行

extra_hosts:
- "docker.for.mac.localhost:host-gateway"

如果您使用的是 docker run 命令,只需像这样使用它

docker run -d 
--name your-container-name 
--extra_hosts="docker.for.mac.localhost:host-gateway" 
your-image-name

上面可以使用容器映射您的机器localhost,因此您可以轻松使用任何本地主机帖子!

以后谢谢我

最新更新