【发布时间】:2017-10-27 19:35:29
【问题描述】:
我目前正在使用 MySQL / SQLAlchemy 开发 Flask 应用程序。
我正在尝试对它进行 dockerize,但它在连接到其中一个套接字时遇到了一些问题。我已经查看了几乎所有关于此的问题,但我仍然收到此错误。
"sqlalchemy.exc.OperationalError: (_mysql_exceptions.OperationalError) (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)"
我目前正在研究 Mac 和 Mac 的终端程序。
我的文件夹树是: MainFolder -> .yml, db(文件夹), www(文件夹)
其中 db(folder) 有一个 Dockerfile,www(folder) 有 .py、requirements 和 Dockerfile
下面列出的是我的这个应用程序的代码。
docker-compose.yml
version: '3'
services:
www:
build: www/.
ports:
- 5000:5000
links:
- db
depends_on:
- db
db:
build: db/.
volumes:
- ./[database]:/usr/local/mysql
environment:
MYSQL_ROOT_PASSWORD: [password]
Dockerfile(用于 www)
FROM python:3-onbuild
# Place app in container
COPY . /opt/www
WORKDIR /opt/www
RUN pip3 install -r requirements.txt
EXPOSE 5000
CMD python index.py
用于 (db) 的 Dockerfile
# MySQL Container
FROM mysql:5.7.18
EXPOSE 3306
CMD ["mysqld"]
index.py
app = Flask(__name__)
# Configure your MySQL Connection
db = SQLAlchemy()
db_uri = 'mysql://root:password@localhost/[database]'
app.config['SQLALCHEMY_DATABASE_URI'] = db_uri
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db.init_app(app)
class Database(db.Model):
versionID = db.Column('versionID', db.Integer, primary_key=True)
versionText = db.Column('versionText', db.String(500),
unique=False)
def __init__(self, versionID, versionText):
self.versionID = versionID
self.versionText = versionText
def serialize(self):
return {
'VersionID' : self.versionID,
'VersionText' : self.versionText
}
@app.route("/")
def test():
return jsonify(json_list=[i.serialize for i in
Database.query.all()])
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
我的输出应该以 JSON 的形式在浏览器中,如下所示:
{ json_list = [ 版本ID:一些ID 版本文本:someText ] }
类似的东西。
任何帮助表示赞赏!这几天一直在努力解决这个问题! 干杯
【问题讨论】:
标签: python mysql docker flask sqlalchemy