繁体   English   中英

无法在 http://localhost:5000 访问 Dockerized Flask 应用程序

[英]Unable access Dockerized Flask app at http://localhost:5000

我正在尝试使用 docker 构建和部署 flask 应用程序。 当我导航到 localhost:5000 时,我得到一个页面卡在加载中。

我正在构建和运行容器

docker-compose up

容器似乎运行良好

Attaching to db_1, flaskapp_1
db_1        |
db_1        | PostgreSQL Database directory appears to contain a database; Skipping initialization
db_1        |
db_1        | 2021-05-18 16:51:31.624 UTC [1] LOG:  starting PostgreSQL 13.3 (Debian 13.3-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
db_1        | 2021-05-18 16:51:31.624 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
db_1        | 2021-05-18 16:51:31.624 UTC [1] LOG:  listening on IPv6 address "::", port 5432
db_1        | 2021-05-18 16:51:31.757 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
db_1        | 2021-05-18 16:51:31.927 UTC [26] LOG:  database system was shut down at 2021-05-18 16:50:46 UTC
db_1        | 2021-05-18 16:51:31.976 UTC [1] LOG:  database system is ready to accept connections
flaskapp_1  |  * Serving Flask app '/usr/src/app/flaskapp/__init__.py' (lazy loading)
flaskapp_1  |  * Environment: development
flaskapp_1  |  * Debug mode: on
flaskapp_1  | /usr/local/lib/python3.9/site-packages/flask_sqlalchemy/__init__.py:872: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True or False to suppress this warning.
flaskapp_1  |   warnings.warn(FSADeprecationWarning(
flaskapp_1  |  * Running on all addresses.
flaskapp_1  |    WARNING: This is a development server. Do not use it in a production deployment.
flaskapp_1  |  * Running on http://192.168.16.3:5000/ (Press CTRL+C to quit)
flaskapp_1  |  * Restarting with stat
flaskapp_1  |  * Debugger is active!
flaskapp_1  |  * Debugger PIN: 132-792-693
flaskapp_1  | /usr/local/lib/python3.9/site-packages/flask_sqlalchemy/__init__.py:872: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True or False to suppress this warning.
flaskapp_1  |   warnings.warn(FSADeprecationWarning(
64051148fde3   52151bbc0161   "flask run --host=0.…"   8 minutes ago   Up 8 minutes   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   flaskapp_flaskapp_1
b368ac60098a   293e4ed402ba   "docker-entrypoint.s…"   8 minutes ago   Up 8 minutes   0.0.0.0:5432->5432/tcp, :::5432->5432/tcp   flaskapp_db_1

我已经尝试过这些解决方案,但没有奏效。

app.run(debug=False, host='0.0.0.0')

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

下面是我的 Dockerfile

# For more information, please refer to https://aka.ms/vscode-docker-python
FROM python

EXPOSE 5000

# Keeps Python from generating .pyc files in the container
ENV PYTHONDONTWRITEBYTECODE=1
# Turns off buffering for easier container logging
ENV PYTHONUNBUFFERED=1

WORKDIR /usr/src/app/
COPY . /usr/src/app/
ENV FLASK_APP=/usr/src/app/__init__.py

# Install pip requirements
COPY requirements.txt /usr/src/app/requirements.txt
RUN pip install --upgrade pip
RUN pip install -r requirements.txt

# Creates a non-root user with an explicit UID and adds permission to access the /app folder
# For more info, please refer to https://aka.ms/vscode-docker-python-configure-containers
RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /usr/src/app/
USER appuser

# During debugging, this entry point will be overridden. For more information, please refer to https://aka.ms/vscode-docker-python-debug
# CMD ["gunicorn", "--bind", "0.0.0.0:5000", "run:app"]

# ENTRYPOINT ["/usr/src/app/entrypoint.sh"]
# CMD ["flask", "run", "--host", "0.0.0.0", "-p", "5000"]
CMD ["flask", "run", "--host=0.0.0.0"]
# ENTRYPOINT ["python", "run.py"]

运行.py

from flaskapp import app, db
from flask.cli import FlaskGroup


if __name__ == "__main__":
    app.run(debug=True, host='0.0.0.0', port=5000)

docker-compose.yml

version: '3.4'

services:
  flaskapp:
    image: flaskapp
    build: .
    env_file: .env.dev
    depends_on:
      - db
    ports:
      - 5000:5000
    volumes:
      - ./flaskapp:/usr/src/app/app
  
  db:
    image: postgres:latest
    networks:
      - default
    ports:
      - 5432:5432
    restart: always
    volumes:
      - ./postgres-data:/var/lib/postgresql/data
    env_file: .env.dev

volumes:
  postgres_data:

配置文件

import os

basedir = os.path.abspath(os.path.dirname(__file__))


class Config(object):
    user = os.environ['POSTGRES_USER']
    password = os.environ['POSTGRES_PASSWORD']
    host = os.environ['POSTGRES_HOST']
    database = os.environ['POSTGRES_DB']
    port = os.environ['POSTGRES_PORT']

    SQLALCHEMY_DATABASE_URI = f'postgresql+psycopg2://{user}:{password}@{host}:{port}/{database}'
    SECRET_KEY = '2a0f51a5c1992df84ee9bbd9817492d5'

.env.dev

FLASK_APP=/usr/src/app/flaskapp/__init__.py
FLASK_ENV=development

POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_HOST=db
POSTGRES_PORT=5432
POSTGRES_DB=postgres

APP_FOLDER=/usr/src/app

完整的源代码在这里

我究竟做错了什么?

原来我只是通过运行启动容器的现有图像

docker-compose up

所以我所要做的就是构建新图像,然后运行这些图像。

docker-compose up --build

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM