mysql-连接器-python 在 docker 上的烧瓶应用程序未连接
mysql-connector-python in flask app on docker not connected
我的本地主机没有问题,我的电脑很好 运行
但在 docker 中不是 运行ning 并且这个错误
已连接
def get_database_connection():
"""connects to the MySQL database and returns the connection"""
return mysql.connector.connect(
host=config.MYSQL_HOST,
user=config.MYSQL_USERNAME,
passwd=config.MYSQL_PASSWORD,
db = config.MYSQL_DB_NAME,
port=config.MYSQL_PORT,
charset='utf8'
)
config.py
MYSQL_HOST = "localhost"
MYSQL_USERNAME = "root"
MYSQL_PASSWORD = ""
MYSQL_PORT = 3306
MYSQL_DB_NAME = "newsdb"
------------错误--------
** Operational MODE: preforking ***
build Tables
error --- > 2003 (HY000): Can't connect to MySQL server on 'localhost' (99)
WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x55e5696d31a0 pid: 10 (default app)
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
项目结构
app
├── admin
│ ├── api.py
│ ├── config.py
│ ├── db.py
│ ├── __init__.py
│ ├── routes.py
│ ├── static
│ └── templates
├── config.py
├── db.py
├── error_handlers.py
├── __init__.py
├── robots
│ ├── robot_runner.py
│ └── robots.py
├── routes.py
├── schema.sql
├── static
│
├── templates
└── test
Dockerfile
FROM tiangolo/uwsgi-nginx-flask:python3.8
COPY . /app
RUN python -m pip install --upgrade pip
COPY ./requirements.txt /var/www/requirements.txt
RUN apt update && apt install -qy libmariadbclient-dev gcc
RUN pip3 install -r /var/www/requirements.txt
这个项目 运行 在我的本地主机上,没有问题...只是想要 运行 图像 docker 显示错误而不连接到 mysql ..
此 Dockerfile
不包含带有图像的 MySQL 服务器。容器的最佳实践是在每个容器中保留一项服务,因此 运行 一项 MySQL 服务容器化意味着 运行 两个独立的容器——一个用于您的 Web 应用程序,一个用于您的 MySQL服务器。
docker-compose 是处理此用例的合理方法。指定包含您的服务定义的 docker-compose.yml
:
version: '2.0'
services:
web:
build: .
ports: [ "5000:5000" ]
links: [ "mysql" ]
mysql:
image: mysql
[... some other configuration parameters to set up the database root account ...]
volumes: [ "mysqldata:/var/lib/mysql" ]
volumes: { mysqldata: {} }
此处引用的 MySQL 图片是 official MySQL image on Docker Hub。
在此之后,您可以连接到 "mysql" 而不是应用程序配置文件中的 "localhost"。
或者,将您的应用程序配置文件指向已设置数据库的 运行 MySQL 服务。请记住,容器中的 localhost
不是您的本地机器——它是容器。您可能需要 appropriately configure Docker networking 容器才能访问您的机器或 MySQL 主机。
我的本地主机没有问题,我的电脑很好 运行 但在 docker 中不是 运行ning 并且这个错误
已连接
def get_database_connection():
"""connects to the MySQL database and returns the connection"""
return mysql.connector.connect(
host=config.MYSQL_HOST,
user=config.MYSQL_USERNAME,
passwd=config.MYSQL_PASSWORD,
db = config.MYSQL_DB_NAME,
port=config.MYSQL_PORT,
charset='utf8'
)
config.py
MYSQL_HOST = "localhost"
MYSQL_USERNAME = "root"
MYSQL_PASSWORD = ""
MYSQL_PORT = 3306
MYSQL_DB_NAME = "newsdb"
------------错误--------
** Operational MODE: preforking ***
build Tables
error --- > 2003 (HY000): Can't connect to MySQL server on 'localhost' (99)
WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x55e5696d31a0 pid: 10 (default app)
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
项目结构
app
├── admin
│ ├── api.py
│ ├── config.py
│ ├── db.py
│ ├── __init__.py
│ ├── routes.py
│ ├── static
│ └── templates
├── config.py
├── db.py
├── error_handlers.py
├── __init__.py
├── robots
│ ├── robot_runner.py
│ └── robots.py
├── routes.py
├── schema.sql
├── static
│
├── templates
└── test
Dockerfile
FROM tiangolo/uwsgi-nginx-flask:python3.8
COPY . /app
RUN python -m pip install --upgrade pip
COPY ./requirements.txt /var/www/requirements.txt
RUN apt update && apt install -qy libmariadbclient-dev gcc
RUN pip3 install -r /var/www/requirements.txt
这个项目 运行 在我的本地主机上,没有问题...只是想要 运行 图像 docker 显示错误而不连接到 mysql ..
此 Dockerfile
不包含带有图像的 MySQL 服务器。容器的最佳实践是在每个容器中保留一项服务,因此 运行 一项 MySQL 服务容器化意味着 运行 两个独立的容器——一个用于您的 Web 应用程序,一个用于您的 MySQL服务器。
docker-compose 是处理此用例的合理方法。指定包含您的服务定义的 docker-compose.yml
:
version: '2.0'
services:
web:
build: .
ports: [ "5000:5000" ]
links: [ "mysql" ]
mysql:
image: mysql
[... some other configuration parameters to set up the database root account ...]
volumes: [ "mysqldata:/var/lib/mysql" ]
volumes: { mysqldata: {} }
此处引用的 MySQL 图片是 official MySQL image on Docker Hub。
在此之后,您可以连接到 "mysql" 而不是应用程序配置文件中的 "localhost"。
或者,将您的应用程序配置文件指向已设置数据库的 运行 MySQL 服务。请记住,容器中的 localhost
不是您的本地机器——它是容器。您可能需要 appropriately configure Docker networking 容器才能访问您的机器或 MySQL 主机。