python - Docker,Flask,SQLAlchemy:ValueError:int() 的无效文字,基数为 10:'None'
问题描述
我有一个可以成功初始化并连接到 Postgresql 数据库的烧瓶应用程序。但是,当我尝试 dockerize 这个应用程序时,我收到以下错误消息。“SQLALCHEMY_DATABASE_URI”是正确的,我可以连接到它,所以我不知道我哪里出错了。
码头工人撰写日志
app_1 | File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/url.py", line 60, in __init__
app_1 | self.port = int(port)
app_1 | ValueError: invalid literal for int() with base 10: 'None'
Postgres 数据库在 Docker 容器中连接成功
postgres_1 | LOG: database system is ready to accept connections
配置文件
from os import environ
import os
RDS_USERNAME = environ.get('RDS_USERNAME')
RDS_PASSWORD = environ.get('RDS_PASSWORD')
RDS_HOSTNAME = environ.get('RDS_HOSTNAME')
RDS_PORT = environ.get('RDS_PORT')
RDS_DB_NAME = environ.get('RDS_DB_NAME')
SQLALCHEMY_DATABASE_URI = "postgresql+psycopg2://{username}:{password}@{hostname}:{port}/{dbname}"\
.format(username = RDS_USERNAME, password = RDS_PASSWORD, \
hostname = RDS_HOSTNAME, port = RDS_PORT, dbname = RDS_DB_NAME)
flask_app.py(入口点)
def create_app():
app = Flask(__name__, static_folder="./static", template_folder="./static")
app.config.from_pyfile('./app/config.py', silent=True)
register_blueprint(app)
register_extension(app)
with app.app_context():
print(db) -> This prints the correct path for SQLALCHEMY_DATABASE_URI
db.create_all()
db.session.commit()
return app
def register_blueprint(app):
app.register_blueprint(view_blueprint)
app.register_blueprint(race_blueprint)
def register_extension(app):
db.init_app(app)
migrate.init_app(app)
app = create_app()
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080, debug=True)
Dockerfile
FROM ubuntu
RUN apt-get update && apt-get -y upgrade
RUN apt-get install -y python-pip && pip install --upgrade pip
RUN mkdir /home/ubuntu
WORKDIR /home/ubuntu/celery-scheduler
ADD requirements.txt /home/ubuntu/celery-scheduler/
RUN pip install -r requirements.txt
COPY . /home/ubuntu/celery-scheduler
EXPOSE 5000
CMD ["python", "flask_app.py", "--host", "0.0.0.0"]
码头工人-compose.yml
version: '2'
services:
app:
restart: always
build:
context: .
dockerfile: Dockerfile
volumes:
- .:/app
depends_on:
- postgres
postgres:
restart: always
image: postgres:9.6
environment:
- POSTGRES_USER=${RDS_USERNAME}
- POSTGRES_PASSWORD=${RDS_PASSWORD}
- POSTGRES_HOSTNAME=${RDS_HOSTNAME}
- POSTGRES_DB=${RDS_DB_NAME}
ports:
- "5432:5432"
解决方案
您需要在 Dockerfile 中设置环境变量 RDS_USERNAME、RDS_PASSWORD、RDS_HOSTNAME、RDS_PORT 和 RDS_DB_NAME ENV key value
,例如
ENV RDS_PORT 5432
推荐阅读
- java - 执行 .sh 文件以运行我的 java 项目时遇到错误
- html - background-image 属性未在 css 中显示图像
- c# - Visual Studio 2019 C# 桌面应用程序 .net 核心在工具箱中缺少控件
- ssl - 有没有办法在 HAProxy 中使用转发代理作为后端(包括身份验证)?
- c++ - std::fabs(a * b) 和 std::fabs(a) * std::fabs(b) 之间的区别
- ruby-on-rails - Rails 救援不活动或无法访问
- php - php - 如何在 4 个月内每天增加用户的已知收入
- javascript - 如何通过AngularJS更改特定路径ID的填充颜色SVG对象
- sql - 按月求和和计数,显示当月的最后一天
- javascript - 自定义 Shopify 按钮嵌入其他网站