gpt4 book ai didi

docker - 无法使用docker-compose从本地主机访问docker应用程序

转载 作者:行者123 更新时间:2023-12-02 18:26:29 26 4
gpt4 key购买 nike

在我开始之前:我已经搜索了这个问题,并实现了“解决方案”是什么,但它没有帮助(将主机设置为0.0.0.0)。所以,就这样,

目录结构

|-- osr
| |-- __init__.py
|-- requirements.txt
|-- Dockerfile
|-- docker-compose.yml

Dockerfile:
FROM python:3.7.5-buster

EXPOSE 5000 # i have tried with and without this

ENV INSTALL_PATH /osr
ENV FLASK_APP osr
ENV FLASK_ENV development
RUN mkdir -p $INSTALL_PATH

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt

COPY . .

CMD [ "flask", "run", "--host=0.0.0.0"]

docker-compose.yml:
version: '3.8'
services:
web:
build: .
ports:
- '5000:5000'
expose:
- '5000'
volumes:
- .:/osr

__初始化__.py
import os
from flask import Flask

def create_app(test_config=None):
app = Flask(__name__, instance_relative_config=True)
app.config.from_mapping(
SECRET_KEY='dev'
)

@app.route('/hello')
def hello():
return 'Hello, World!'

return app

docker-compose构建网站
docker-compose运行网站
 * Serving Flask app "osr" (lazy loading)
* Environment: development
* Debug mode: on
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 225-441-434

以下所有内容均返回“无法访问此页面”
http://localhost
http://localhost:5000/hello
http://127.0.0.1:5000/hello

我什至尝试过使用

docker exec -it 49e677 bash
ip添加| grep全局
inet 172.21.0.2/16 brd 172.21.255.255作用域全局eth0
http://127.21.0.2:5000/hello # nothing

没有。

我确信应用程序本身可以正常运行,因为我可以直接运行该应用程序。
$env:FLASK_APP="osr"
$env:FLASK_ENV="development"
flask run --host=0.0.0.0

而且运行良好

localhost

编辑:更新

当我通过简单的Dockerfile运行它时,我实际上能够到达该容器...使用

docker run -it -p 5000:5000 osr_web#docker-compose build构建的容器

这样,我就可以通过localhost:5000 / hello访问端点

所以问题似乎在于通过docker-compose run将其旋转

这有帮助吗?

更新2

我发现当我运行docker ps -a时,我可以看到Docker运行实际上暴露了端口,但是docker-compose运行没有:

enter image description here

最佳答案

您确定应用程序本身可以正常工作吗?我试图运行您的python __init__.py文件,并最终出现错误。

python osr/__init__.py 
File "osr/__init__.py", line 11
def hello():
^
IndentationError: unexpected indent

解决了缩进错误后,它可以工作。
@app.route('/hello')
def hello():
return 'Hello, World!'

$ docker run -d -p 5000:5000 harik8/osr:latest
76628f86fecb61c0be4a969d3c91c5c575702ad8063b594a6c1c90b498ea25f1

$ curl http://127.0.0.1:5000/hello
Hello, World!

您不能在端口5000上同时运行docker和docker-compose。一次运行一个或更改docker-compose / dockerfile主机端口。
$ docker ps -a | grep osr
8b885c4a9654 harik8/osr:latest "flask run --host=0.…" 12 seconds ago Up 11 seconds 0.0.0.0:5000->5000/tcp
$ docker ps -a | grep q5
70f38bf11e26 q5_web "flask run --host=0.…" About a minute ago Up 10 seconds 0.0.0.0:5001->5000/tcp
$ docker ps -a | grep q5
f9f6ba999109 q5_web "flask run --host=0.…" 5 minutes ago Up 5 minutes 0.0.0.0:5000->5000/tcp q5_web_1
$ docker ps -a | grep osr
93fb421333e4 harik8/osr:latest "flask run --host=0.…" 18 seconds ago Up 18 seconds 5000/tcp

关于docker - 无法使用docker-compose从本地主机访问docker应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62099993/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com